Regeneration from plexi a0ceeba
diff --git a/coverage/com.google.enterprise.adaptor.Application.html b/coverage/com.google.enterprise.adaptor.Application.html
index e1df48f..fe72c9c 100644
--- a/coverage/com.google.enterprise.adaptor.Application.html
+++ b/coverage/com.google.enterprise.adaptor.Application.html
@@ -55,908 +55,904 @@
<tr> <td class="numLine"> 16</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 17</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.annotations.VisibleForTesting;</pre></td></tr>
-<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> com.sun.net.httpserver.HttpServer;</pre></td></tr>
-<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> com.sun.net.httpserver.HttpsConfigurator;</pre></td></tr>
-<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> com.sun.net.httpserver.HttpsParameters;</pre></td></tr>
-<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> com.sun.net.httpserver.HttpsServer;</pre></td></tr>
-<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.File;</pre></td></tr>
-<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.FileInputStream;</pre></td></tr>
-<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.IOException;</pre></td></tr>
-<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.InputStream;</pre></td></tr>
-<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.net.InetSocketAddress;</pre></td></tr>
-<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.net.MalformedURLException;</pre></td></tr>
-<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.net.URL;</pre></td></tr>
-<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.net.URLConnection;</pre></td></tr>
-<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.security.NoSuchAlgorithmException;</pre></td></tr>
-<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Arrays;</pre></td></tr>
-<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.HashSet;</pre></td></tr>
-<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.List;</pre></td></tr>
-<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Locale;</pre></td></tr>
-<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Map.Entry;</pre></td></tr>
-<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Properties;</pre></td></tr>
-<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Set;</pre></td></tr>
-<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.concurrent.ArrayBlockingQueue;</pre></td></tr>
-<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.concurrent.BlockingQueue;</pre></td></tr>
-<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.concurrent.Executor;</pre></td></tr>
-<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.concurrent.ExecutorService;</pre></td></tr>
-<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.concurrent.LinkedBlockingQueue;</pre></td></tr>
-<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.concurrent.RejectedExecutionHandler;</pre></td></tr>
-<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.concurrent.Semaphore;</pre></td></tr>
-<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.concurrent.ThreadPoolExecutor;</pre></td></tr>
-<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.concurrent.TimeUnit;</pre></td></tr>
-<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.logging.Level;</pre></td></tr>
-<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.logging.Logger;</pre></td></tr>
-<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> javax.net.ssl.SSLContext;</pre></td></tr>
-<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> javax.net.ssl.SSLParameters;</pre></td></tr>
-<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Provides framework for adaptors to act as a stand-alone application. This</span></pre></td></tr>
-<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * entails creating well-configured HttpServer instances, argument parsing,</span></pre></td></tr>
-<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * shutdown handling, and more.</span></pre></td></tr>
-<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 60</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> Application {</pre></td></tr>
-<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 58</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> Application {</pre></td></tr>
+<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String SLEEP_PATH = <span class="string">"/sleep"</span>;</pre></td></tr>
-<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">final</span> String DEFAULT_CONFIG_FILE</pre></td></tr>
-<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = <span class="string">"adaptor-config.properties"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 63</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Logger log</pre></td></tr>
<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 65</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Logger log</pre></td></tr>
-<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = Logger.getLogger(Application.<span class="keyword">class</span>.getName());</pre></td></tr>
-<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Config config;</pre></td></tr>
-<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> GsaCommunicationHandler gsa;</pre></td></tr>
-<tr> <td class="numLineCover"> 70</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ConfigModificationListener configModListener</pre></td></tr>
-<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 68</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ConfigModificationListener configModListener</pre></td></tr>
+<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = <span class="keyword">new</span> ConfigModListener();</pre></td></tr>
-<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 73</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * An "inverted" semaphore that has permits available when stop() is running;</span></pre></td></tr>
-<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * at all other times it has no permits. This allows start() to sleep on the</span></pre></td></tr>
-<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 73</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * semaphore and be woken when stop() is called.</span></pre></td></tr>
+<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 75</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Semaphore shutdownSemaphore = <span class="keyword">new</span> Semaphore(0);</pre></td></tr>
<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 77</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Semaphore shutdownSemaphore = <span class="keyword">new</span> Semaphore(0);</pre></td></tr>
-<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> Thread shutdownHook;</pre></td></tr>
-<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> HttpServer primaryServer;</pre></td></tr>
-<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> HttpServer dashboardServer;</pre></td></tr>
-<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 82</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">public</span> Application(Adaptor adaptor, Config config) {</pre></td></tr>
-<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.config = config;</pre></td></tr>
-<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 80</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">public</span> Application(Adaptor adaptor, Config config) {</pre></td></tr>
+<tr> <td class="numLineCover"> 81</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.config = config;</pre></td></tr>
+<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 85</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> gsa = <span class="keyword">new</span> GsaCommunicationHandler(adaptor, config);</pre></td></tr>
-<tr> <td class="numLineCover"> 86</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> gsa = <span class="keyword">new</span> GsaCommunicationHandler(adaptor, config);</pre></td></tr>
+<tr> <td class="numLineCover"> 84</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Start necessary services for receiving requests and managing background</span></pre></td></tr>
-<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * tasks. Non-daemon threads are created, so call {@link #stop} for graceful</span></pre></td></tr>
-<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * manual shutdown. A shutdown hook is automatically installed that calls</span></pre></td></tr>
-<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * {@code stop()}.</span></pre></td></tr>
-<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="keyword">void</span> start() <span class="keyword">throws</span> IOException, InterruptedException,</pre></td></tr>
-<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> StartupException {</pre></td></tr>
-<tr> <td class="numLineCover"> 96</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
-<tr> <td class="numLineCover"> 97</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> daemonInit();</pre></td></tr>
-<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 94</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
+<tr> <td class="numLineCover"> 95</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> daemonInit();</pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// The shutdown hook is purposefully not part of the deamon methods,</span></pre></td></tr>
-<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// because it should only be done when running from the command line.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 101</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> shutdownHook = <span class="keyword">new</span> Thread(<span class="keyword">new</span> ShutdownHook(), <span class="string">"gsacomm-shutdown"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 102</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> Runtime.getRuntime().addShutdownHook(shutdownHook);</pre></td></tr>
-<tr> <td class="numLineCover"> 103</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 99</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> shutdownHook = <span class="keyword">new</span> Thread(<span class="keyword">new</span> ShutdownHook(), <span class="string">"gsacomm-shutdown"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 100</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> Runtime.getRuntime().addShutdownHook(shutdownHook);</pre></td></tr>
+<tr> <td class="numLineCover"> 101</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 105</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> daemonStart();</pre></td></tr>
-<tr> <td class="numLineCover"> 106</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 103</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> daemonStart();</pre></td></tr>
+<tr> <td class="numLineCover"> 104</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Reserves resources for later use. This may be run with different</span></pre></td></tr>
-<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * permissions (like as root), to reserve ports or other things that need</span></pre></td></tr>
-<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * elevated privileges.</span></pre></td></tr>
-<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> daemonInit() <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 114</td> <td class="nbHitsUncovered"><a title="Line 114: Conditional coverage 50% (1/2)."> 12</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 114: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (primaryServer != <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 115</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Already started"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 112</td> <td class="nbHitsUncovered"><a title="Line 112: Conditional coverage 50% (1/2)."> 12</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 112: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (primaryServer != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 113</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Already started"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 117</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> primaryServer = createHttpServer(config);</pre></td></tr>
-<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> dashboardServer = createDashboardHttpServer(config);</pre></td></tr>
-<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 115</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> primaryServer = createHttpServer(config);</pre></td></tr>
+<tr> <td class="numLineCover"> 116</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> dashboardServer = createDashboardHttpServer(config);</pre></td></tr>
+<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Because once stopped the server can't be reused, we can't reuse its</span></pre></td></tr>
-<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// bind()ed socket if we stop it. So although ideally we would start/stop in</span></pre></td></tr>
-<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// daemonStart/daemonStop, we instead must do it in</span></pre></td></tr>
-<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// daemonInit/daemonDestroy.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 123</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> primaryServer.start();</pre></td></tr>
-<tr> <td class="numLineCover"> 124</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> dashboardServer.start();</pre></td></tr>
-<tr> <td class="numLineCover"> 125</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 121</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> primaryServer.start();</pre></td></tr>
+<tr> <td class="numLineCover"> 122</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> dashboardServer.start();</pre></td></tr>
+<tr> <td class="numLineCover"> 123</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 126</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 127</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Really start. This must be called after a successful {@link #daemonInit}.</span></pre></td></tr>
-<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 127</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> daemonStart() <span class="keyword">throws</span> IOException, InterruptedException,</pre></td></tr>
-<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> StartupException {</pre></td></tr>
-<tr> <td class="numLineCover"> 132</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> AdaptorContext context = gsa.setup(primaryServer, dashboardServer, <span class="keyword">null</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 130</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> AdaptorContext context = gsa.setup(primaryServer, dashboardServer, <span class="keyword">null</span>);</pre></td></tr>
+<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 132</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">long</span> sleepDurationMillis = 8000;</pre></td></tr>
<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 134</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">long</span> sleepDurationMillis = 8000;</pre></td></tr>
-<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// An hour.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 136</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">long</span> maxSleepDurationMillis = 60 * 60 * 1000;</pre></td></tr>
-<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 134</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">long</span> maxSleepDurationMillis = 60 * 60 * 1000;</pre></td></tr>
+<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Loop until 1) the adaptor starts successfully, 2) an unrecoverable</span></pre></td></tr>
-<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// StartupException is thrown, 3) stop() is called, or 4) Thread.interrupt()</span></pre></td></tr>
-<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// is called on this thread (which we don't do).</span></pre></td></tr>
-<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Retrying to start the adaptor is helpful in cases where it needs</span></pre></td></tr>
-<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// initialization data from a repository that is temporarily down; if the</span></pre></td></tr>
-<tr> <td class="numLine"> 142</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// adaptor is running as a service, we don't want to stop starting simply</span></pre></td></tr>
-<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// because another computer is down while we start (which would easily be</span></pre></td></tr>
-<tr> <td class="numLine"> 144</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 142</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// the case after a power failure).</span></pre></td></tr>
-<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">while</span> (<span class="keyword">true</span>) {</pre></td></tr>
-<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 144</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 147</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> gsa.tryToPutVersionIntoConfig();</pre></td></tr>
-<tr> <td class="numLineCover"> 148</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> String adaptorType = gsa.getAdaptor().getClass().getName();</pre></td></tr>
-<tr> <td class="numLineCover"> 149</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> log.log(Level.INFO, <span class="string">"about to init {0}"</span>, adaptorType); </pre></td></tr>
-<tr> <td class="numLineCover"> 150</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> gsa.getAdaptor().init(context);</pre></td></tr>
-<tr> <td class="numLineCover"> 151</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 152</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 153</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> ex;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 154</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (StartupException ex) { </pre></td></tr>
-<tr> <td class="numLineCover"> 155</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Failed to initialize adaptor"</span>, ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 156</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> ex;</pre></td></tr>
-<tr> <td class="numLineCover"> 157</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (Exception ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 158</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Failed to initialize adaptor"</span>, ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 159</td> <td class="nbHitsCovered"><a title="Line 159: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 159: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (shutdownSemaphore.tryAcquire(sleepDurationMillis,</a></pre></td></tr>
-<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 145</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> gsa.tryToPutVersionIntoConfig();</pre></td></tr>
+<tr> <td class="numLineCover"> 146</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> String adaptorType = gsa.getAdaptor().getClass().getName();</pre></td></tr>
+<tr> <td class="numLineCover"> 147</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> log.log(Level.INFO, <span class="string">"about to init {0}"</span>, adaptorType); </pre></td></tr>
+<tr> <td class="numLineCover"> 148</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> gsa.getAdaptor().init(context);</pre></td></tr>
+<tr> <td class="numLineCover"> 149</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 150</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 151</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> ex;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 152</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (StartupException ex) { </pre></td></tr>
+<tr> <td class="numLineCover"> 153</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Failed to initialize adaptor"</span>, ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 154</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> ex;</pre></td></tr>
+<tr> <td class="numLineCover"> 155</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (Exception ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 156</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Failed to initialize adaptor"</span>, ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 157</td> <td class="nbHitsCovered"><a title="Line 157: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 157: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (shutdownSemaphore.tryAcquire(sleepDurationMillis,</a></pre></td></tr>
+<tr> <td class="numLine"> 158</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> TimeUnit.MILLISECONDS)) {</pre></td></tr>
-<tr> <td class="numLineCover"> 161</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> shutdownSemaphore.release();</pre></td></tr>
-<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 159</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> shutdownSemaphore.release();</pre></td></tr>
+<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Shutdown initiated.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 163</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 161</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span>;</pre></td></tr>
+<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 163</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> sleepDurationMillis</pre></td></tr>
<tr> <td class="numLine"> 164</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 165</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> sleepDurationMillis</pre></td></tr>
-<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = Math.min(sleepDurationMillis * 2, maxSleepDurationMillis);</pre></td></tr>
-<tr> <td class="numLineCover"> 167</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> gsa.ensureLatestConfigLoaded();</pre></td></tr>
-<tr> <td class="numLineCover"> 168</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 169</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 165</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> gsa.ensureLatestConfigLoaded();</pre></td></tr>
+<tr> <td class="numLineCover"> 166</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 167</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 168</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 171</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> config.addConfigModificationListener(configModListener);</pre></td></tr>
-<tr> <td class="numLineCover"> 172</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> gsa.start();</pre></td></tr>
-<tr> <td class="numLineCover"> 173</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 169</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> config.addConfigModificationListener(configModListener);</pre></td></tr>
+<tr> <td class="numLineCover"> 170</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> gsa.start();</pre></td></tr>
+<tr> <td class="numLineCover"> 171</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 172</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 173</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 174</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 176</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Stop processing incoming requests and background tasks, allowing graceful</span></pre></td></tr>
-<tr> <td class="numLine"> 177</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * shutdown.</span></pre></td></tr>
-<tr> <td class="numLine"> 178</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 176</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 179</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 177</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> stop(<span class="keyword">long</span> time, TimeUnit unit) {</pre></td></tr>
-<tr> <td class="numLineCover"> 180</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> daemonStop(time, unit);</pre></td></tr>
-<tr> <td class="numLineCover"> 181</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> daemonDestroy(time, unit);</pre></td></tr>
-<tr> <td class="numLineCover"> 182</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
-<tr> <td class="numLineCover"> 183</td> <td class="nbHitsUncovered"><a title="Line 183: Conditional coverage 50% (1/2)."> 10</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 183: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (shutdownHook != <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLine"> 184</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 178</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> daemonStop(time, unit);</pre></td></tr>
+<tr> <td class="numLineCover"> 179</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> daemonDestroy(time, unit);</pre></td></tr>
+<tr> <td class="numLineCover"> 180</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
+<tr> <td class="numLineCover"> 181</td> <td class="nbHitsUncovered"><a title="Line 181: Conditional coverage 50% (1/2)."> 10</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 181: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (shutdownHook != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLine"> 182</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 185</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> Runtime.getRuntime().removeShutdownHook(shutdownHook);</pre></td></tr>
-<tr> <td class="numLineCover"> 186</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IllegalStateException ex) {</span></pre></td></tr>
-<tr> <td class="numLine"> 187</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 183</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> Runtime.getRuntime().removeShutdownHook(shutdownHook);</pre></td></tr>
+<tr> <td class="numLineCover"> 184</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IllegalStateException ex) {</span></pre></td></tr>
+<tr> <td class="numLine"> 185</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Already executing hook.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 188</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 189</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> shutdownHook = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 190</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 186</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 187</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> shutdownHook = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 188</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 191</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 192</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 189</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 190</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 191</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 192</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 193</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 194</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 195</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Stop all the services we provide. This is the opposite of {@link</span></pre></td></tr>
-<tr> <td class="numLine"> 196</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 194</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * #daemonStart}.</span></pre></td></tr>
-<tr> <td class="numLine"> 197</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 195</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 198</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 196</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">void</span> daemonStop(<span class="keyword">long</span> time, TimeUnit unit) {</pre></td></tr>
-<tr> <td class="numLineCover"> 199</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> shutdownSemaphore.release();</pre></td></tr>
-<tr> <td class="numLine"> 200</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 197</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> shutdownSemaphore.release();</pre></td></tr>
+<tr> <td class="numLine"> 198</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 201</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
-<tr> <td class="numLineCover"> 202</td> <td class="nbHitsCovered"><a title="Line 202: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 202: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (primaryServer == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 203</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Already stopped"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 204</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 199</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (<span class="keyword">this</span>) {</pre></td></tr>
+<tr> <td class="numLineCover"> 200</td> <td class="nbHitsCovered"><a title="Line 200: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 200: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (primaryServer == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 201</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Already stopped"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 202</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 205</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> config.removeConfigModificationListener(configModListener);</pre></td></tr>
-<tr> <td class="numLineCover"> 206</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> gsa.stop(time, unit);</pre></td></tr>
+<tr> <td class="numLineCover"> 203</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> config.removeConfigModificationListener(configModListener);</pre></td></tr>
+<tr> <td class="numLineCover"> 204</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> gsa.stop(time, unit);</pre></td></tr>
+<tr> <td class="numLine"> 205</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 206</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> gsa.getAdaptor().destroy();</pre></td></tr>
<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 208</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> gsa.getAdaptor().destroy();</pre></td></tr>
-<tr> <td class="numLine"> 209</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 210</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> gsa.teardown();</pre></td></tr>
-<tr> <td class="numLineCover"> 211</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 212</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 208</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> gsa.teardown();</pre></td></tr>
+<tr> <td class="numLineCover"> 209</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 210</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 211</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 214</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> interrupted = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLine"> 215</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 212</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> interrupted = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">while</span> (<span class="keyword">true</span>) {</pre></td></tr>
-<tr> <td class="numLine"> 216</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 214</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 217</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> shutdownSemaphore.acquire();</pre></td></tr>
-<tr> <td class="numLineCover"> 218</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 219</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 220</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> interrupted = <span class="keyword">true</span>;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 221</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 222</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 215</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> shutdownSemaphore.acquire();</pre></td></tr>
+<tr> <td class="numLineCover"> 216</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 217</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 218</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> interrupted = <span class="keyword">true</span>;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 219</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 220</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 223</td> <td class="nbHitsUncovered"><a title="Line 223: Conditional coverage 50% (1/2)."> 20</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 223: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (interrupted) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 224</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Thread.currentThread().interrupt();</span></pre></td></tr>
-<tr> <td class="numLine"> 225</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 221</td> <td class="nbHitsUncovered"><a title="Line 221: Conditional coverage 50% (1/2)."> 20</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 221: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (interrupted) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 222</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Thread.currentThread().interrupt();</span></pre></td></tr>
+<tr> <td class="numLine"> 223</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 226</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 227</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 224</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 225</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 226</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 228</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 229</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 230</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Release reserved resources. This is the opposite of {@link</span></pre></td></tr>
-<tr> <td class="numLine"> 231</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 229</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * #daemonInit}.</span></pre></td></tr>
-<tr> <td class="numLine"> 232</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 230</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 233</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 231</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> daemonDestroy(<span class="keyword">long</span> time, TimeUnit unit) {</pre></td></tr>
-<tr> <td class="numLineCover"> 234</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> httpServerShutdown(primaryServer, time, unit);</pre></td></tr>
-<tr> <td class="numLineCover"> 235</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> log.finer(<span class="string">"Completed primary server stop"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 236</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> primaryServer = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 237</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 232</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> httpServerShutdown(primaryServer, time, unit);</pre></td></tr>
+<tr> <td class="numLineCover"> 233</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> log.finer(<span class="string">"Completed primary server stop"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 234</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> primaryServer = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 235</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 238</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> httpServerShutdown(dashboardServer, time, unit);</pre></td></tr>
-<tr> <td class="numLineCover"> 239</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> log.finer(<span class="string">"Completed dashboard stop"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 240</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> dashboardServer = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 241</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 242</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 236</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> httpServerShutdown(dashboardServer, time, unit);</pre></td></tr>
+<tr> <td class="numLineCover"> 237</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> log.finer(<span class="string">"Completed dashboard stop"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 238</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> dashboardServer = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 239</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 241</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">void</span> httpServerShutdown(HttpServer server, <span class="keyword">long</span> time,</pre></td></tr>
-<tr> <td class="numLine"> 244</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 242</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> TimeUnit unit) {</pre></td></tr>
-<tr> <td class="numLine"> 245</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Workaround Java Bug 7105369.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 246</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> SleepHandler sleepHandler = <span class="keyword">new</span> SleepHandler(100 <span class="comment">/* millis */</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 247</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> server.createContext(SLEEP_PATH, sleepHandler);</pre></td></tr>
-<tr> <td class="numLineCover"> 248</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> issueSleepGetRequest(server.getAddress(), server <span class="keyword">instanceof</span> HttpsServer);</pre></td></tr>
-<tr> <td class="numLine"> 249</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 244</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> SleepHandler sleepHandler = <span class="keyword">new</span> SleepHandler(100 <span class="comment">/* millis */</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 245</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> server.createContext(SLEEP_PATH, sleepHandler);</pre></td></tr>
+<tr> <td class="numLineCover"> 246</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> issueSleepGetRequest(server.getAddress(), server <span class="keyword">instanceof</span> HttpsServer);</pre></td></tr>
+<tr> <td class="numLine"> 247</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 250</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> server.stop((<span class="keyword">int</span>) unit.toSeconds(time));</pre></td></tr>
-<tr> <td class="numLineCover"> 251</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> ((ExecutorService) server.getExecutor()).shutdownNow();</pre></td></tr>
-<tr> <td class="numLineCover"> 252</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 248</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> server.stop((<span class="keyword">int</span>) unit.toSeconds(time));</pre></td></tr>
+<tr> <td class="numLineCover"> 249</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> ((ExecutorService) server.getExecutor()).shutdownNow();</pre></td></tr>
+<tr> <td class="numLineCover"> 250</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 251</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 252</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 253</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 254</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 255</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Issues a GET request to a SleepHandler. This is used to workaround Java</span></pre></td></tr>
-<tr> <td class="numLine"> 256</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 254</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Bug 7105369.</span></pre></td></tr>
-<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 255</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
-<tr> <td class="numLine"> 258</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 256</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * <p>The bug is an issue with HttpServer where stop() waits the full amount</span></pre></td></tr>
-<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * of allotted time if the serve is idle. However, if a request is being</span></pre></td></tr>
-<tr> <td class="numLine"> 260</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 258</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * handled when stop() is called, then it will return as soon as all requests</span></pre></td></tr>
-<tr> <td class="numLine"> 261</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * are processed, or the allotted time is reached.</span></pre></td></tr>
-<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 260</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
-<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 261</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * <p>Thus, this workaround tries to force a request to be in-procees when</span></pre></td></tr>
-<tr> <td class="numLine"> 264</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * stop() is called, so that it can return sooner. We issue a request to a</span></pre></td></tr>
-<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * SleepHandler that takes a fixed amount of time to process the request</span></pre></td></tr>
-<tr> <td class="numLine"> 266</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 264</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * before calling stop(). In the event everything goes as planned, the request</span></pre></td></tr>
-<tr> <td class="numLine"> 267</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * completes after stop() has been called and allows stop() to exit quickly.</span></pre></td></tr>
-<tr> <td class="numLine"> 268</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 266</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 269</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 267</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> issueSleepGetRequest(InetSocketAddress address,</pre></td></tr>
-<tr> <td class="numLine"> 270</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 268</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">boolean</span> isHttps) {</pre></td></tr>
-<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 269</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> URL url;</pre></td></tr>
+<tr> <td class="numLine"> 270</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 271</td> <td class="nbHitsCovered"><a title="Line 271: Conditional coverage 100% (2/2)."> 24</a></td> <td class="src"><pre class="src"> <a title="Line 271: Conditional coverage 100% (2/2)."> url = <span class="keyword">new</span> URL(isHttps ? <span class="string">"https"</span> : <span class="string">"http"</span>,</a></pre></td></tr>
<tr> <td class="numLine"> 272</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 273</td> <td class="nbHitsCovered"><a title="Line 273: Conditional coverage 100% (2/2)."> 24</a></td> <td class="src"><pre class="src"> <a title="Line 273: Conditional coverage 100% (2/2)."> url = <span class="keyword">new</span> URL(isHttps ? <span class="string">"https"</span> : <span class="string">"http"</span>,</a></pre></td></tr>
-<tr> <td class="numLine"> 274</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> address.getAddress().getHostAddress(), address.getPort(), SLEEP_PATH);</pre></td></tr>
-<tr> <td class="numLineCover"> 275</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (MalformedURLException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 276</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING,</span></pre></td></tr>
-<tr> <td class="numLine"> 277</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 273</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (MalformedURLException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 274</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING,</span></pre></td></tr>
+<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="string">"Unexpected error. Shutting down will be slow."</span>, ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 278</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span>;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 279</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 280</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 276</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span>;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 277</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 278</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 281</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 279</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">final</span> URLConnection conn;</pre></td></tr>
-<tr> <td class="numLine"> 282</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 280</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 283</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> conn = url.openConnection();</pre></td></tr>
-<tr> <td class="numLineCover"> 284</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> conn.connect();</pre></td></tr>
-<tr> <td class="numLineCover"> 285</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (IOException ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 286</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Error performing shutdown GET"</span>, ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 287</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 288</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 289</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 281</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> conn = url.openConnection();</pre></td></tr>
+<tr> <td class="numLineCover"> 282</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> conn.connect();</pre></td></tr>
+<tr> <td class="numLineCover"> 283</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (IOException ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 284</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Error performing shutdown GET"</span>, ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 285</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 286</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 287</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLine"> 290</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 288</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Provide some time for the connect() to be processed on the server.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 291</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> Thread.sleep(15);</pre></td></tr>
-<tr> <td class="numLineCover"> 292</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 293</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Thread.currentThread().interrupt();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 294</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 295</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">new</span> Thread(<span class="keyword">new</span> Runnable() {</pre></td></tr>
-<tr> <td class="numLine"> 296</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 289</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> Thread.sleep(15);</pre></td></tr>
+<tr> <td class="numLineCover"> 290</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 291</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Thread.currentThread().interrupt();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 292</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 293</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">new</span> Thread(<span class="keyword">new</span> Runnable() {</pre></td></tr>
+<tr> <td class="numLine"> 294</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 297</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 295</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
-<tr> <td class="numLine"> 298</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 296</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 299</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> conn.getInputStream().close();</pre></td></tr>
-<tr> <td class="numLineCover"> 300</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> log.finer(<span class="string">"Closed shutdown GET"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 301</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (IOException ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 302</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Error closing stream of shutdown GET"</span>, ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 303</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 304</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 305</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 297</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> conn.getInputStream().close();</pre></td></tr>
+<tr> <td class="numLineCover"> 298</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> log.finer(<span class="string">"Closed shutdown GET"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 299</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (IOException ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 300</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Error closing stream of shutdown GET"</span>, ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 301</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 302</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 303</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }).start();</pre></td></tr>
-<tr> <td class="numLineCover"> 306</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 307</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 304</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 305</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 308</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 306</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">static</span> HttpServer createHttpServer(Config config) <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLine"> 309</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 307</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> HttpServer server;</pre></td></tr>
-<tr> <td class="numLineCover"> 310</td> <td class="nbHitsCovered"><a title="Line 310: Conditional coverage 100% (2/2)."> 12</a></td> <td class="src"><pre class="src"> <a title="Line 310: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!config.isServerSecure()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 311</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> server = HttpServer.create();</pre></td></tr>
+<tr> <td class="numLineCover"> 308</td> <td class="nbHitsCovered"><a title="Line 308: Conditional coverage 100% (2/2)."> 12</a></td> <td class="src"><pre class="src"> <a title="Line 308: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!config.isServerSecure()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 309</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> server = HttpServer.create();</pre></td></tr>
+<tr> <td class="numLine"> 310</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 311</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> server = HttpsServer.create();</pre></td></tr>
<tr> <td class="numLine"> 312</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 313</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> server = HttpsServer.create();</pre></td></tr>
-<tr> <td class="numLine"> 314</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 315</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> HttpsConfigurator httpsConf</pre></td></tr>
-<tr> <td class="numLineCover"> 316</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> = <span class="keyword">new</span> HttpsConfigurator(SSLContext.getDefault()) {</pre></td></tr>
-<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 313</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> HttpsConfigurator httpsConf</pre></td></tr>
+<tr> <td class="numLineCover"> 314</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> = <span class="keyword">new</span> HttpsConfigurator(SSLContext.getDefault()) {</pre></td></tr>
+<tr> <td class="numLine"> 315</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> configure(HttpsParameters params) {</pre></td></tr>
-<tr> <td class="numLineCover"> 318</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> SSLParameters sslParams</pre></td></tr>
-<tr> <td class="numLine"> 319</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 316</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> SSLParameters sslParams</pre></td></tr>
+<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = getSSLContext().getDefaultSSLParameters();</pre></td></tr>
-<tr> <td class="numLine"> 320</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Allow verifying the GSA and other trusted computers.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 321</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> sslParams.setWantClientAuth(<span class="keyword">true</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 322</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> params.setSSLParameters(sslParams);</pre></td></tr>
-<tr> <td class="numLineCover"> 323</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 324</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 319</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> sslParams.setWantClientAuth(<span class="keyword">true</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 320</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> params.setSSLParameters(sslParams);</pre></td></tr>
+<tr> <td class="numLineCover"> 321</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 322</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> };</pre></td></tr>
-<tr> <td class="numLineCover"> 325</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ((HttpsServer) server).setHttpsConfigurator(httpsConf);</pre></td></tr>
-<tr> <td class="numLineCover"> 326</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (java.security.NoSuchAlgorithmException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 327</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 328</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 329</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 323</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ((HttpsServer) server).setHttpsConfigurator(httpsConf);</pre></td></tr>
+<tr> <td class="numLineCover"> 324</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (java.security.NoSuchAlgorithmException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 325</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 326</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 327</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 330</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 328</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 331</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">int</span> maxThreads = config.getServerMaxWorkerThreads();</pre></td></tr>
-<tr> <td class="numLineCover"> 332</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">int</span> queueCapacity = config.getServerQueueCapacity();</pre></td></tr>
-<tr> <td class="numLineCover"> 333</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> BlockingQueue<Runnable> blockingQueue</pre></td></tr>
-<tr> <td class="numLine"> 334</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 329</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">int</span> maxThreads = config.getServerMaxWorkerThreads();</pre></td></tr>
+<tr> <td class="numLineCover"> 330</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">int</span> queueCapacity = config.getServerQueueCapacity();</pre></td></tr>
+<tr> <td class="numLineCover"> 331</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> BlockingQueue<Runnable> blockingQueue</pre></td></tr>
+<tr> <td class="numLine"> 332</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = <span class="keyword">new</span> ArrayBlockingQueue<Runnable>(queueCapacity);</pre></td></tr>
-<tr> <td class="numLine"> 335</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 333</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// The Executor can't reject jobs directly, because HttpServer does not</span></pre></td></tr>
-<tr> <td class="numLine"> 336</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 334</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// appear to handle that case.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 337</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> RejectedExecutionHandler policy</pre></td></tr>
-<tr> <td class="numLine"> 338</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 335</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> RejectedExecutionHandler policy</pre></td></tr>
+<tr> <td class="numLine"> 336</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = <span class="keyword">new</span> SuggestHandlerAbortPolicy(HttpExchanges.abortImmediately);</pre></td></tr>
-<tr> <td class="numLineCover"> 339</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> Executor executor = <span class="keyword">new</span> ThreadPoolExecutor(maxThreads, maxThreads,</pre></td></tr>
-<tr> <td class="numLine"> 340</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 337</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> Executor executor = <span class="keyword">new</span> ThreadPoolExecutor(maxThreads, maxThreads,</pre></td></tr>
+<tr> <td class="numLine"> 338</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> 1, TimeUnit.MINUTES, blockingQueue, policy);</pre></td></tr>
-<tr> <td class="numLineCover"> 341</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> server.setExecutor(executor);</pre></td></tr>
-<tr> <td class="numLine"> 342</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 339</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> server.setExecutor(executor);</pre></td></tr>
+<tr> <td class="numLine"> 340</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 343</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> server.bind(<span class="keyword">new</span> InetSocketAddress(config.getServerPort()), 0);</pre></td></tr>
-<tr> <td class="numLineCover"> 344</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> log.info(<span class="string">"GSA host name: "</span> + config.getGsaHostname());</pre></td></tr>
-<tr> <td class="numLineCover"> 345</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> log.info(<span class="string">"server is listening on port #"</span> + server.getAddress().getPort());</pre></td></tr>
-<tr> <td class="numLineCover"> 346</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">return</span> server;</pre></td></tr>
+<tr> <td class="numLineCover"> 341</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> server.bind(<span class="keyword">new</span> InetSocketAddress(config.getServerPort()), 0);</pre></td></tr>
+<tr> <td class="numLineCover"> 342</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> log.info(<span class="string">"GSA host name: "</span> + config.getGsaHostname());</pre></td></tr>
+<tr> <td class="numLineCover"> 343</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> log.info(<span class="string">"server is listening on port #"</span> + server.getAddress().getPort());</pre></td></tr>
+<tr> <td class="numLineCover"> 344</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">return</span> server;</pre></td></tr>
+<tr> <td class="numLine"> 345</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 346</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 347</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 348</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 349</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">static</span> HttpServer createDashboardHttpServer(Config config)</pre></td></tr>
+<tr> <td class="numLine"> 348</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 349</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> secure = config.isServerSecure();</pre></td></tr>
<tr> <td class="numLine"> 350</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 351</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> secure = config.isServerSecure();</pre></td></tr>
-<tr> <td class="numLine"> 352</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> HttpServer server;</pre></td></tr>
-<tr> <td class="numLineCover"> 353</td> <td class="nbHitsCovered"><a title="Line 353: Conditional coverage 100% (2/2)."> 12</a></td> <td class="src"><pre class="src"> <a title="Line 353: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!secure) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 354</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> server = HttpServer.create();</pre></td></tr>
+<tr> <td class="numLineCover"> 351</td> <td class="nbHitsCovered"><a title="Line 351: Conditional coverage 100% (2/2)."> 12</a></td> <td class="src"><pre class="src"> <a title="Line 351: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!secure) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 352</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> server = HttpServer.create();</pre></td></tr>
+<tr> <td class="numLine"> 353</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 354</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> server = HttpsServer.create();</pre></td></tr>
<tr> <td class="numLine"> 355</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 356</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> server = HttpsServer.create();</pre></td></tr>
-<tr> <td class="numLine"> 357</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> SSLContext defaultSslContext;</pre></td></tr>
-<tr> <td class="numLine"> 358</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 356</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 359</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> defaultSslContext = SSLContext.getDefault();</pre></td></tr>
-<tr> <td class="numLineCover"> 360</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (NoSuchAlgorithmException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 361</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 362</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 363</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> HttpsConfigurator httpsConf = <span class="keyword">new</span> HttpsConfigurator(defaultSslContext);</pre></td></tr>
-<tr> <td class="numLineCover"> 364</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ((HttpsServer) server).setHttpsConfigurator(httpsConf);</pre></td></tr>
-<tr> <td class="numLine"> 365</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 357</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> defaultSslContext = SSLContext.getDefault();</pre></td></tr>
+<tr> <td class="numLineCover"> 358</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (NoSuchAlgorithmException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 359</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 360</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 361</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> HttpsConfigurator httpsConf = <span class="keyword">new</span> HttpsConfigurator(defaultSslContext);</pre></td></tr>
+<tr> <td class="numLineCover"> 362</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ((HttpsServer) server).setHttpsConfigurator(httpsConf);</pre></td></tr>
+<tr> <td class="numLine"> 363</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 366</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 364</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// The Dashboard is on a separate port to prevent malicious HTML documents</span></pre></td></tr>
-<tr> <td class="numLine"> 367</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 365</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// in the user's repository from performing admin actions with</span></pre></td></tr>
-<tr> <td class="numLine"> 368</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 366</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// XMLHttpRequest or the like, as the HTML page will then be blocked by</span></pre></td></tr>
-<tr> <td class="numLine"> 369</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 367</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// same-origin policies.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 370</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> server.bind(<span class="keyword">new</span> InetSocketAddress(config.getServerDashboardPort()), 0);</pre></td></tr>
-<tr> <td class="numLine"> 371</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 368</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> server.bind(<span class="keyword">new</span> InetSocketAddress(config.getServerDashboardPort()), 0);</pre></td></tr>
+<tr> <td class="numLine"> 369</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 372</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 370</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Use separate Executor for Dashboard to allow the administrator to</span></pre></td></tr>
-<tr> <td class="numLine"> 373</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 371</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// investigate why things are going wrong without waiting on the normal work</span></pre></td></tr>
-<tr> <td class="numLine"> 374</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 372</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// queue.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 375</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">int</span> maxThreads = 4;</pre></td></tr>
-<tr> <td class="numLineCover"> 376</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> Executor executor = <span class="keyword">new</span> ThreadPoolExecutor(maxThreads, maxThreads,</pre></td></tr>
-<tr> <td class="numLine"> 377</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 373</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">int</span> maxThreads = 4;</pre></td></tr>
+<tr> <td class="numLineCover"> 374</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> Executor executor = <span class="keyword">new</span> ThreadPoolExecutor(maxThreads, maxThreads,</pre></td></tr>
+<tr> <td class="numLine"> 375</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> 10, TimeUnit.MINUTES, <span class="keyword">new</span> LinkedBlockingQueue<Runnable>());</pre></td></tr>
-<tr> <td class="numLineCover"> 378</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> server.setExecutor(executor);</pre></td></tr>
+<tr> <td class="numLineCover"> 376</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> server.setExecutor(executor);</pre></td></tr>
+<tr> <td class="numLine"> 377</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 378</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> log.info(<span class="string">"dashboard is listening on port #"</span></pre></td></tr>
<tr> <td class="numLine"> 379</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 380</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> log.info(<span class="string">"dashboard is listening on port #"</span></pre></td></tr>
-<tr> <td class="numLine"> 381</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> + server.getAddress().getPort());</pre></td></tr>
+<tr> <td class="numLine"> 380</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 381</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">return</span> server;</pre></td></tr>
<tr> <td class="numLine"> 382</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 383</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 383</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">return</span> server;</pre></td></tr>
<tr> <td class="numLine"> 384</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 385</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 386</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/** Returns the {@link GsaCommunicationHandler} used by this instance. */</span></pre></td></tr>
-<tr> <td class="numLine"> 387</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 385</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> GsaCommunicationHandler getGsaCommunicationHandler() {</pre></td></tr>
-<tr> <td class="numLineCover"> 388</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> gsa;</pre></td></tr>
+<tr> <td class="numLineCover"> 386</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> gsa;</pre></td></tr>
+<tr> <td class="numLine"> 387</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 388</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 389</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</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="numLine"> 391</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/** Returns the {@link Config} used by this instance. */</span></pre></td></tr>
-<tr> <td class="numLine"> 392</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 390</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> Config getConfig() {</pre></td></tr>
-<tr> <td class="numLineCover"> 393</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> config;</pre></td></tr>
+<tr> <td class="numLineCover"> 391</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> config;</pre></td></tr>
+<tr> <td class="numLine"> 392</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 393</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 394</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 395</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 396</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 397</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Load default configuration file and parse command line options.</span></pre></td></tr>
-<tr> <td class="numLine"> 398</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 396</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
-<tr> <td class="numLine"> 399</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 397</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * @return unused command line arguments</span></pre></td></tr>
-<tr> <td class="numLine"> 400</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 398</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * @throws IllegalStateException when not all configuration keys have values</span></pre></td></tr>
-<tr> <td class="numLine"> 401</td> <td class="nbHits"> </td>
+<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"> 402</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 400</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">static</span> String[] autoConfig(Config config, String[] args, File configFile) {</pre></td></tr>
-<tr> <td class="numLineCover"> 403</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> File sysPropertiesAdditions = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 404</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 401</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> File sysPropertiesAdditions = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 402</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">int</span> i;</pre></td></tr>
-<tr> <td class="numLineCover"> 405</td> <td class="nbHitsCovered"><a title="Line 405: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 405: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (i = 0; i < args.length; i++) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 406</td> <td class="nbHitsUncovered"><a title="Line 406: Conditional coverage 50% (1/2)."> 13</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 406: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!args[i].startsWith(<span class="string">"-D"</span>)) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 407</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"> 408</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 403</td> <td class="nbHitsCovered"><a title="Line 403: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 403: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (i = 0; i < args.length; i++) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 404</td> <td class="nbHitsUncovered"><a title="Line 404: Conditional coverage 50% (1/2)."> 13</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 404: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!args[i].startsWith(<span class="string">"-D"</span>)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 405</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"> 406</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 409</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> String arg = args[i].substring(2);</pre></td></tr>
-<tr> <td class="numLineCover"> 410</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> String[] parts = arg.split(<span class="string">"="</span>, 2);</pre></td></tr>
-<tr> <td class="numLineCover"> 411</td> <td class="nbHitsUncovered"><a title="Line 411: Conditional coverage 50% (1/2)."> 13</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 411: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (parts.length < 2) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 412</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"> 413</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 407</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> String arg = args[i].substring(2);</pre></td></tr>
+<tr> <td class="numLineCover"> 408</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> String[] parts = arg.split(<span class="string">"="</span>, 2);</pre></td></tr>
+<tr> <td class="numLineCover"> 409</td> <td class="nbHitsUncovered"><a title="Line 409: Conditional coverage 50% (1/2)."> 13</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 409: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (parts.length < 2) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 410</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">break</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 411</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 414</td> <td class="nbHitsCovered"><a title="Line 414: Conditional coverage 100% (2/2)."> 13</a></td> <td class="src"><pre class="src"> <a title="Line 414: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="string">"adaptor.configfile"</span>.equals(parts[0])) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 415</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> configFile = <span class="keyword">new</span> File(parts[1]);</pre></td></tr>
-<tr> <td class="numLineCover"> 416</td> <td class="nbHitsCovered"><a title="Line 416: Conditional coverage 100% (2/2)."> 11</a></td> <td class="src"><pre class="src"> <a title="Line 416: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (<span class="string">"sys.properties.file"</span>.equals(parts[0])) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 417</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> sysPropertiesAdditions = <span class="keyword">new</span> File(parts[1]);</pre></td></tr>
+<tr> <td class="numLineCover"> 412</td> <td class="nbHitsCovered"><a title="Line 412: Conditional coverage 100% (2/2)."> 13</a></td> <td class="src"><pre class="src"> <a title="Line 412: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="string">"adaptor.configfile"</span>.equals(parts[0])) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 413</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> configFile = <span class="keyword">new</span> File(parts[1]);</pre></td></tr>
+<tr> <td class="numLineCover"> 414</td> <td class="nbHitsCovered"><a title="Line 414: Conditional coverage 100% (2/2)."> 11</a></td> <td class="src"><pre class="src"> <a title="Line 414: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (<span class="string">"sys.properties.file"</span>.equals(parts[0])) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 415</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> sysPropertiesAdditions = <span class="keyword">new</span> File(parts[1]);</pre></td></tr>
+<tr> <td class="numLine"> 416</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 417</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> config.setValue(parts[0], parts[1]);</pre></td></tr>
<tr> <td class="numLine"> 418</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 419</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> config.setValue(parts[0], parts[1]);</pre></td></tr>
-<tr> <td class="numLine"> 420</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 421</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 419</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 422</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> processSystemProperties(sysPropertiesAdditions);</pre></td></tr>
-<tr> <td class="numLineCover"> 423</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> loadConfigFile(config, configFile);</pre></td></tr>
-<tr> <td class="numLineCover"> 424</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> config.validate();</pre></td></tr>
-<tr> <td class="numLineCover"> 425</td> <td class="nbHitsCovered"><a title="Line 425: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 425: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (i == 0) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 426</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> args;</pre></td></tr>
-<tr> <td class="numLine"> 427</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 420</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> processSystemProperties(sysPropertiesAdditions);</pre></td></tr>
+<tr> <td class="numLineCover"> 421</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> loadConfigFile(config, configFile);</pre></td></tr>
+<tr> <td class="numLineCover"> 422</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> config.validate();</pre></td></tr>
+<tr> <td class="numLineCover"> 423</td> <td class="nbHitsCovered"><a title="Line 423: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 423: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (i == 0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 424</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> args;</pre></td></tr>
+<tr> <td class="numLine"> 425</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 428</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Arrays.copyOfRange(args, i, args.length);</pre></td></tr>
+<tr> <td class="numLineCover"> 426</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Arrays.copyOfRange(args, i, args.length);</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="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>
+ <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="numLine"> 431</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 432</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> processSystemProperties(File extraProps) {</pre></td></tr>
-<tr> <td class="numLineCover"> 433</td> <td class="nbHitsCovered"><a title="Line 433: Conditional coverage 100% (2/2)."> 7</a></td> <td class="src"><pre class="src"> <a title="Line 433: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == extraProps) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 434</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> log.log(Level.CONFIG, <span class="string">"no extra system properties to load"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 435</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span>;</pre></td></tr>
-<tr> <td class="numLine"> 436</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 431</td> <td class="nbHitsCovered"><a title="Line 431: Conditional coverage 100% (2/2)."> 7</a></td> <td class="src"><pre class="src"> <a title="Line 431: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == extraProps) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 432</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> log.log(Level.CONFIG, <span class="string">"no extra system properties to load"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 433</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span>;</pre></td></tr>
+<tr> <td class="numLine"> 434</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 437</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 435</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"> FileInputStream extras = <span class="keyword">new</span> FileInputStream(extraProps);</pre></td></tr>
-<tr> <td class="numLineCover"> 439</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> processSystemProperties(extras);</pre></td></tr>
-<tr> <td class="numLineCover"> 440</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> extras.close();</pre></td></tr>
-<tr> <td class="numLineCover"> 441</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException e) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 442</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.CONFIG, <span class="string">"could not read system properties file {0}"</span>,</span></pre></td></tr>
-<tr> <td class="numLine"> 443</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 436</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> FileInputStream extras = <span class="keyword">new</span> FileInputStream(extraProps);</pre></td></tr>
+<tr> <td class="numLineCover"> 437</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> processSystemProperties(extras);</pre></td></tr>
+<tr> <td class="numLineCover"> 438</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> extras.close();</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> (IOException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 440</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.CONFIG, <span class="string">"could not read system properties file {0}"</span>,</span></pre></td></tr>
+<tr> <td class="numLine"> 441</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> extraProps.getAbsolutePath());</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="numLineCover"> 445</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 446</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 442</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</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"> </pre></td></tr>
-<tr> <td class="numLine"> 447</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 445</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> processSystemProperties(InputStream extraProps) </pre></td></tr>
-<tr> <td class="numLine"> 448</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 446</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 449</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Properties extra = <span class="keyword">new</span> Properties();</pre></td></tr>
-<tr> <td class="numLineCover"> 450</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> extra.load(extraProps);</pre></td></tr>
-<tr> <td class="numLineCover"> 451</td> <td class="nbHitsCovered"><a title="Line 451: Conditional coverage 100% (2/2)."> 1</a></td> <td class="src"><pre class="src"> <a title="Line 451: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Entry<Object, Object> e : extra.entrySet()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 452</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> String previous = System.setProperty(<span class="string">""</span> + e.getKey(), <span class="string">""</span> + e.getValue());</pre></td></tr>
-<tr> <td class="numLineCover"> 453</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"sys property {0} set to {1}; was {2}"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 454</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 447</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Properties extra = <span class="keyword">new</span> Properties();</pre></td></tr>
+<tr> <td class="numLineCover"> 448</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> extra.load(extraProps);</pre></td></tr>
+<tr> <td class="numLineCover"> 449</td> <td class="nbHitsCovered"><a title="Line 449: Conditional coverage 100% (2/2)."> 1</a></td> <td class="src"><pre class="src"> <a title="Line 449: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Entry<Object, Object> e : extra.entrySet()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 450</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> String previous = System.setProperty(<span class="string">""</span> + e.getKey(), <span class="string">""</span> + e.getValue());</pre></td></tr>
+<tr> <td class="numLineCover"> 451</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"sys property {0} set to {1}; was {2}"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 452</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {e.getKey(), e.getValue(), previous}); </pre></td></tr>
-<tr> <td class="numLineCover"> 455</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 456</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 453</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 454</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 455</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 456</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 457</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 458</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 459</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Loads the provided config file, if it exists. It squelches any errors so</span></pre></td></tr>
-<tr> <td class="numLine"> 460</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 458</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * that you are free to call it without error handling, since this is</span></pre></td></tr>
-<tr> <td class="numLine"> 461</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 459</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * typically non-fatal.</span></pre></td></tr>
-<tr> <td class="numLine"> 462</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 460</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 463</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 461</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> loadConfigFile(Config config, File configFile) {</pre></td></tr>
-<tr> <td class="numLineCover"> 464</td> <td class="nbHitsUncovered"><a title="Line 464: Conditional coverage 83% (5/6) [each condition: 100%, 100%, 50%]."> 7</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 464: Conditional coverage 83% (5/6) [each condition: 100%, 100%, 50%]."> <span class="keyword">if</span> (<span class="keyword">null</span> != configFile && configFile.exists() && configFile.isFile()) {</a></span></pre></td></tr>
-<tr> <td class="numLine"> 465</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 462</td> <td class="nbHitsUncovered"><a title="Line 462: Conditional coverage 83% (5/6) [each condition: 100%, 100%, 50%]."> 7</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 462: Conditional coverage 83% (5/6) [each condition: 100%, 100%, 50%]."> <span class="keyword">if</span> (<span class="keyword">null</span> != configFile && configFile.exists() && configFile.isFile()) {</a></span></pre></td></tr>
+<tr> <td class="numLine"> 463</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 466</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> config.load(configFile);</pre></td></tr>
-<tr> <td class="numLineCover"> 467</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 468</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> System.err.println(<span class="string">"Exception when reading "</span> + configFile);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 469</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ex.printStackTrace(System.err);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 470</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 471</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 464</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> config.load(configFile);</pre></td></tr>
+<tr> <td class="numLineCover"> 465</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 466</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> System.err.println(<span class="string">"Exception when reading "</span> + configFile);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 467</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ex.printStackTrace(System.err);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 468</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 469</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 472</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 470</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 471</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 472</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"> </pre></td></tr>
-<tr> <td class="numLine"> 474</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 475</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Main for adaptors to utilize when wanting to act as an application. This</span></pre></td></tr>
-<tr> <td class="numLine"> 476</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 474</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * method primarily parses arguments and creates an application instance</span></pre></td></tr>
-<tr> <td class="numLine"> 477</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 475</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * before calling it's {@link #start}.</span></pre></td></tr>
-<tr> <td class="numLine"> 478</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 476</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
-<tr> <td class="numLine"> 479</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 477</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * @return the application instance in use</span></pre></td></tr>
-<tr> <td class="numLine"> 480</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 478</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 481</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 479</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Application main(Adaptor adaptor, String[] args) {</pre></td></tr>
-<tr> <td class="numLineCover"> 482</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="keyword">new</span> Dashboard.JavaVersionStatusSource().retrieveStatus()</span></pre></td></tr>
-<tr> <td class="numLine"> 483</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 480</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="keyword">new</span> Dashboard.JavaVersionStatusSource().retrieveStatus()</span></pre></td></tr>
+<tr> <td class="numLine"> 481</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> .getMessage(Locale.ENGLISH));</pre></td></tr>
-<tr> <td class="numLineCover"> 484</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Application app = daemonMain(adaptor, args);</span></pre></td></tr>
-<tr> <td class="numLine"> 485</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 482</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Application app = daemonMain(adaptor, args);</span></pre></td></tr>
+<tr> <td class="numLine"> 483</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 486</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 484</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Setup providing content.</span></pre></td></tr>
-<tr> <td class="numLine"> 487</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 485</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLine"> 488</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 486</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 489</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> app.start();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 490</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"doc content serving started"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 491</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (StartupException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 487</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> app.start();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 488</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"doc content serving started"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 489</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (StartupException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 490</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"could not start serving"</span>, e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 491</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException e) {</span></pre></td></tr>
<tr> <td class="numLineCover"> 492</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"could not start serving"</span>, e);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 493</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException e) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 494</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"could not start serving"</span>, e);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 495</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 496</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException e) {</span></pre></td></tr>
-<tr> <td class="numLine"> 497</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 493</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 494</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException e) {</span></pre></td></tr>
+<tr> <td class="numLine"> 495</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Do not call stop - it has already been called.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 498</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"could not start serving"</span>, e);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 499</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (Throwable t) {</span></pre></td></tr>
-<tr> <td class="numLine"> 500</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 496</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"could not start serving"</span>, e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 497</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (Throwable t) {</span></pre></td></tr>
+<tr> <td class="numLine"> 498</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Abnormal termination. Make sure any services that may have been</span></pre></td></tr>
-<tr> <td class="numLine"> 501</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 499</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// started are shut down.</span></pre></td></tr>
-<tr> <td class="numLine"> 502</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 500</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 503</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> app.stop(3, TimeUnit.SECONDS);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 504</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (Throwable ignored) {</span></pre></td></tr>
-<tr> <td class="numLine"> 505</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 501</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> app.stop(3, TimeUnit.SECONDS);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 502</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (Throwable ignored) {</span></pre></td></tr>
+<tr> <td class="numLine"> 503</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// It was a noble try. Just get out.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 506</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 507</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 504</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 505</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Now rethrow.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 508</td> <td class="nbHitsUncovered"><a title="Line 508: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 508: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (t <span class="keyword">instanceof</span> RuntimeException) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 509</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> (RuntimeException) t;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 510</td> <td class="nbHitsUncovered"><a title="Line 510: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 510: Conditional coverage 0% (0/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (t <span class="keyword">instanceof</span> Error) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 511</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> (Error) t;</span></pre></td></tr>
-<tr> <td class="numLine"> 512</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 506</td> <td class="nbHitsUncovered"><a title="Line 506: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 506: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (t <span class="keyword">instanceof</span> RuntimeException) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 507</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> (RuntimeException) t;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 508</td> <td class="nbHitsUncovered"><a title="Line 508: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 508: Conditional coverage 0% (0/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (t <span class="keyword">instanceof</span> Error) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 509</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> (Error) t;</span></pre></td></tr>
+<tr> <td class="numLine"> 510</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLine"> 513</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 511</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Very unlikely to happen.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 514</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(t);</span></pre></td></tr>
-<tr> <td class="numLine"> 515</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 512</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(t);</span></pre></td></tr>
+<tr> <td class="numLine"> 513</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 516</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 517</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> app;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 514</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 515</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> app;</span></pre></td></tr>
+<tr> <td class="numLine"> 516</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 517</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 518</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">/**</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>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 521</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Performs basic bootstrapping like normal {@link #main}, but does not start</span></pre></td></tr>
-<tr> <td class="numLine"> 522</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 520</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * the application.</span></pre></td></tr>
-<tr> <td class="numLine"> 523</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 521</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 524</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 522</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">static</span> Application daemonMain(Adaptor adaptor, String[] args) {</pre></td></tr>
-<tr> <td class="numLineCover"> 525</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> Config config = <span class="keyword">new</span> Config();</pre></td></tr>
-<tr> <td class="numLineCover"> 526</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> adaptor.initConfig(config);</pre></td></tr>
-<tr> <td class="numLineCover"> 527</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> autoConfig(config, args, <span class="keyword">new</span> File(DEFAULT_CONFIG_FILE));</pre></td></tr>
-<tr> <td class="numLineCover"> 528</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> Application(adaptor, config);</pre></td></tr>
-<tr> <td class="numLine"> 529</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 523</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> Config config = <span class="keyword">new</span> Config();</pre></td></tr>
+<tr> <td class="numLineCover"> 524</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> adaptor.initConfig(config);</pre></td></tr>
+<tr> <td class="numLineCover"> 525</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> autoConfig(config, args, <span class="keyword">new</span> File(DEFAULT_CONFIG_FILE));</pre></td></tr>
+<tr> <td class="numLineCover"> 526</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> Application(adaptor, config);</pre></td></tr>
+<tr> <td class="numLine"> 527</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 528</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 529</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> ShutdownHook <span class="keyword">implements</span> Runnable {</pre></td></tr>
<tr> <td class="numLine"> 530</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 531</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> ShutdownHook <span class="keyword">implements</span> Runnable {</pre></td></tr>
-<tr> <td class="numLine"> 532</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 533</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 531</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
-<tr> <td class="numLineCover"> 534</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> stop(3, TimeUnit.SECONDS);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 535</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 532</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> stop(3, TimeUnit.SECONDS);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 533</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</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="numLine"> 536</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 537</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 538</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 539</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 537</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Executes Runnable in current thread, but only after setting a thread-local</span></pre></td></tr>
-<tr> <td class="numLine"> 540</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 538</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * object. The code that will be run, is expected to take notice of the set</span></pre></td></tr>
-<tr> <td class="numLine"> 541</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 539</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * variable and abort immediately. This is a hack.</span></pre></td></tr>
-<tr> <td class="numLine"> 542</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 540</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 543</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 541</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> SuggestHandlerAbortPolicy</pre></td></tr>
-<tr> <td class="numLine"> 544</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 542</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">implements</span> RejectedExecutionHandler {</pre></td></tr>
-<tr> <td class="numLine"> 545</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 543</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ThreadLocal<Object> abortImmediately;</pre></td></tr>
-<tr> <td class="numLineCover"> 546</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Object signal = <span class="keyword">new</span> Object();</pre></td></tr>
-<tr> <td class="numLine"> 547</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 544</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Object signal = <span class="keyword">new</span> Object();</pre></td></tr>
+<tr> <td class="numLine"> 545</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 548</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">public</span> SuggestHandlerAbortPolicy(ThreadLocal<Object> abortImmediately) {</pre></td></tr>
-<tr> <td class="numLineCover"> 549</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.abortImmediately = abortImmediately;</pre></td></tr>
-<tr> <td class="numLineCover"> 550</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 546</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">public</span> SuggestHandlerAbortPolicy(ThreadLocal<Object> abortImmediately) {</pre></td></tr>
+<tr> <td class="numLineCover"> 547</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.abortImmediately = abortImmediately;</pre></td></tr>
+<tr> <td class="numLineCover"> 548</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 549</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 550</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 551</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 552</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 553</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> rejectedExecution(Runnable r, ThreadPoolExecutor executor) {</pre></td></tr>
-<tr> <td class="numLineCover"> 554</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> abortImmediately.set(signal);</span></pre></td></tr>
-<tr> <td class="numLine"> 555</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 552</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> abortImmediately.set(signal);</span></pre></td></tr>
+<tr> <td class="numLine"> 553</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 556</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> r.run();</span></pre></td></tr>
-<tr> <td class="numLine"> 557</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 554</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> r.run();</span></pre></td></tr>
+<tr> <td class="numLine"> 555</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 558</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> abortImmediately.set(<span class="keyword">null</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 559</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 560</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 561</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 556</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> abortImmediately.set(<span class="keyword">null</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 557</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 558</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 559</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"> </pre></td></tr>
+<tr> <td class="numLineCover"> 561</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> ConfigModListener <span class="keyword">implements</span> ConfigModificationListener {</pre></td></tr>
<tr> <td class="numLine"> 562</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 563</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> ConfigModListener <span class="keyword">implements</span> ConfigModificationListener {</pre></td></tr>
-<tr> <td class="numLine"> 564</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 565</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 563</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> configModified(ConfigModificationEvent ev) {</pre></td></tr>
-<tr> <td class="numLineCover"> 566</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> Set<String> modifiedKeys = ev.getModifiedKeys();</pre></td></tr>
-<tr> <td class="numLineCover"> 567</td> <td class="nbHitsCovered"><a title="Line 567: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 567: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (modifiedKeys.contains(<span class="string">"adaptor.fullListingSchedule"</span>)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 568</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> gsa.rescheduleFullListing(</pre></td></tr>
-<tr> <td class="numLine"> 569</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 564</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> Set<String> modifiedKeys = ev.getModifiedKeys();</pre></td></tr>
+<tr> <td class="numLineCover"> 565</td> <td class="nbHitsCovered"><a title="Line 565: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 565: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (modifiedKeys.contains(<span class="string">"adaptor.fullListingSchedule"</span>)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 566</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> gsa.rescheduleFullListing(</pre></td></tr>
+<tr> <td class="numLine"> 567</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> ev.getNewConfig().getAdaptorFullListingSchedule());</pre></td></tr>
-<tr> <td class="numLine"> 570</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 568</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 571</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 569</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 572</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 570</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// List of "safe" keys that can be updated without a restart.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 573</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> List<String> safeKeys = Arrays.asList(<span class="string">"adaptor.fullListingSchedule"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 574</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 571</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> List<String> safeKeys = Arrays.asList(<span class="string">"adaptor.fullListingSchedule"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 572</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Set of "unsafe" keys that have been modified.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 575</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> Set<String> modifiedKeysRequiringRestart</pre></td></tr>
-<tr> <td class="numLine"> 576</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 573</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> Set<String> modifiedKeysRequiringRestart</pre></td></tr>
+<tr> <td class="numLine"> 574</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = <span class="keyword">new</span> HashSet<String>(modifiedKeys);</pre></td></tr>
-<tr> <td class="numLineCover"> 577</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> modifiedKeysRequiringRestart.removeAll(safeKeys);</pre></td></tr>
-<tr> <td class="numLine"> 578</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 575</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> modifiedKeysRequiringRestart.removeAll(safeKeys);</pre></td></tr>
+<tr> <td class="numLine"> 576</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// If there are modified "unsafe" keys, then we restart things to make</span></pre></td></tr>
-<tr> <td class="numLine"> 579</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 577</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// sure all the code is up-to-date with the new values.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 580</td> <td class="nbHitsCovered"><a title="Line 580: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 580: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!modifiedKeysRequiringRestart.isEmpty()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 581</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.warning(<span class="string">"Unsafe configuration keys modified. To ensure a sane "</span></pre></td></tr>
-<tr> <td class="numLine"> 582</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 578</td> <td class="nbHitsCovered"><a title="Line 578: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 578: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!modifiedKeysRequiringRestart.isEmpty()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 579</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.warning(<span class="string">"Unsafe configuration keys modified. To ensure a sane "</span></pre></td></tr>
+<tr> <td class="numLine"> 580</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> + <span class="string">"state, the adaptor is restarting."</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 583</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> daemonStop(3, TimeUnit.SECONDS);</pre></td></tr>
-<tr> <td class="numLine"> 584</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 581</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> daemonStop(3, TimeUnit.SECONDS);</pre></td></tr>
+<tr> <td class="numLine"> 582</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 585</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> daemonStart();</pre></td></tr>
-<tr> <td class="numLineCover"> 586</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 587</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.SEVERE, <span class="string">"Automatic restart failed"</span>, ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 588</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 589</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 590</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 583</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> daemonStart();</pre></td></tr>
+<tr> <td class="numLineCover"> 584</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 585</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.SEVERE, <span class="string">"Automatic restart failed"</span>, ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 586</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 587</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 588</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 591</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 592</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 589</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 590</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 593</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 591</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.CommandStreamParser.html b/coverage/com.google.enterprise.adaptor.CommandStreamParser.html
index 08b6652..34480fd 100644
--- a/coverage/com.google.enterprise.adaptor.CommandStreamParser.html
+++ b/coverage/com.google.enterprise.adaptor.CommandStreamParser.html
@@ -794,614 +794,622 @@
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover"> 426</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> authzStatus = AuthzStatus.valueOf(authzStatusString);</pre></td></tr>
<tr> <td class="numLineCover"> 427</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IllegalArgumentException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 428</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"Unrecognized authz-status of '"</span> + authzStatusString + <span class="string">"' for document: '"</span> +</span></pre></td></tr>
+<tr> <td class="numLineCover"> 428</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"Unrecognized authz-status of '"</span> + authzStatusString + <span class="string">"' for document: '"</span></span></pre></td></tr>
<tr> <td class="numLine"> 429</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> docId + <span class="string">"'"</span>);</pre></td></tr>
+ <td class="src"><pre class="src"> + docId + <span class="string">"'"</span>);</pre></td></tr>
<tr> <td class="numLineCover"> 430</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLineCover"> 431</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"> 432</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">default</span>:</pre></td></tr>
-<tr> <td class="numLineCover"> 433</td> <td class="nbHitsUncovered"><a title="Line 433: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 433: Conditional coverage 0% (0/2)."> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Authorizer Error: invalid operation: '"</span> + command.getOperation() +</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 433</td> <td class="nbHitsUncovered"><a title="Line 433: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 433: Conditional coverage 0% (0/2)."> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Authorizer Error: invalid operation: '"</span> + command.getOperation()</a></span></pre></td></tr>
<tr> <td class="numLine"> 434</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>
+ <td class="src"><pre class="src"> + (command.hasArgument() ? <span class="string">"' with argument: '"</span> + command.getArgument() : <span class="string">""</span>)</pre></td></tr>
<tr> <td class="numLine"> 435</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"'"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 436</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 436</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
-<tr> <td class="numLine"> 437</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 437</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
+<tr> <td class="numLine"> 438</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 438</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> result.put(<span class="keyword">new</span> DocId(docId), authzStatus);</pre></td></tr>
-<tr> <td class="numLine"> 439</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 439</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> result.put(<span class="keyword">new</span> DocId(docId), authzStatus);</pre></td></tr>
+<tr> <td class="numLine"> 440</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 440</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Collections.unmodifiableMap(result);</pre></td></tr>
-<tr> <td class="numLine"> 441</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 441</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Collections.unmodifiableMap(result);</pre></td></tr>
<tr> <td class="numLine"> 442</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"> 443</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 444</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> readFromRetriever(DocId docId, Response response) <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 444</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> Command command = readCommand();</pre></td></tr>
-<tr> <td class="numLine"> 445</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 445</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> Command command = readCommand();</pre></td></tr>
+<tr> <td class="numLine"> 446</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 446</td> <td class="nbHitsUncovered"><a title="Line 446: Conditional coverage 50% (1/2)."> 15</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 446: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (command == <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 447</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">"Invalid or missing retriever data."</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 448</td> <td class="nbHitsUncovered"><a title="Line 448: Conditional coverage 50% (1/2)."> 15</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 448: Conditional coverage 50% (1/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (command.getOperation() != Operation.ID) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 449</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">"Retriever Error: the first operator must be a document ID. "</span></span></pre></td></tr>
-<tr> <td class="numLine"> 450</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="numLineCover"> 447</td> <td class="nbHitsUncovered"><a title="Line 447: Conditional coverage 50% (1/2)."> 15</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 447: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (command == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 448</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">"Invalid or missing retriever data."</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 449</td> <td class="nbHitsUncovered"><a title="Line 449: Conditional coverage 50% (1/2)."> 15</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 449: Conditional coverage 50% (1/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (command.getOperation() != Operation.ID) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 450</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">"Retriever Error: the first operator must be a document ID. "</span></span></pre></td></tr>
<tr> <td class="numLine"> 451</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 452</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 453</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> DocId foundDocId = <span class="keyword">new</span> DocId(command.getArgument());</pre></td></tr>
-<tr> <td class="numLineCover"> 454</td> <td class="nbHitsUncovered"><a title="Line 454: Conditional coverage 50% (1/2)."> 15</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 454: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!docId.equals(foundDocId)) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 455</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"> 456</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">"document "</span> + foundDocId + <span class="string">"."</span>);</pre></td></tr>
-<tr> <td class="numLine"> 457</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 458</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 459</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> sendAclWithDocument = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 460</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> Acl.Builder aclBuilder = <span class="keyword">new</span> Acl.Builder();</pre></td></tr>
-<tr> <td class="numLineCover"> 461</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> DocId inheritFrom = <span class="keyword">null</span>; <span class="comment">// saves inherit-from in case fragment comes</span></pre></td></tr>
-<tr> <td class="numLineCover"> 462</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> Set<Principal> permits = <span class="keyword">new</span> TreeSet<Principal>(); <span class="comment">// accumulates acl state</span></pre></td></tr>
-<tr> <td class="numLineCover"> 463</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> Set<Principal> denies = <span class="keyword">new</span> TreeSet<Principal>(); <span class="comment">// accumulates acl state</span></pre></td></tr>
-<tr> <td class="numLineCover"> 464</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> String namespace = Principal.DEFAULT_NAMESPACE; <span class="comment">// last given namespace</span></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="numLineCover"> 466</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
-<tr> <td class="numLineCover"> 467</td> <td class="nbHitsCovered"><a title="Line 467: Conditional coverage 100% (2/2)."> 72</a></td> <td class="src"><pre class="src"> <a title="Line 467: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (command != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 468</td> <td class="nbHitsUncovered"><a title="Line 468: Conditional coverage 85% (24/28)."> 58</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 468: Conditional coverage 85% (24/28)."> <span class="keyword">switch</span> (command.getOperation()) {</a></span></pre></td></tr>
-<tr> <td class="numLine"> 469</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> ID:</pre></td></tr>
-<tr> <td class="numLineCover"> 470</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">"Only one document ID can be specified in a retriever message"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 471</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> CONTENT:</pre></td></tr>
-<tr> <td class="numLineCover"> 472</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> IOHelper.copyStream(inputStream, response.getOutputStream());</pre></td></tr>
-<tr> <td class="numLineCover"> 473</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 474</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> META_NAME:</pre></td></tr>
-<tr> <td class="numLineCover"> 475</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String metaName = command.getArgument();</pre></td></tr>
-<tr> <td class="numLineCover"> 476</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
-<tr> <td class="numLineCover"> 477</td> <td class="nbHitsUncovered"><a title="Line 477: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 477: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (command == <span class="keyword">null</span> || command.getOperation() != Operation.META_VALUE) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 478</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"meta-name must be immediately followed by meta-value"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 479</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 480</td> <td class="nbHitsCovered"> 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"> 481</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"> 482</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> command.getArgument()});</pre></td></tr>
-<tr> <td class="numLineCover"> 483</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> response.addMetadata(metaName, command.getArgument());</pre></td></tr>
-<tr> <td class="numLineCover"> 484</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 485</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"> 486</td> <td class="nbHitsCovered"> 4</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"> 487</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> response.respondNotModified();</pre></td></tr>
-<tr> <td class="numLineCover"> 488</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 489</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"> 490</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"> 491</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"> 492</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"> 493</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"> 494</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"> 495</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> response.setContentType(command.getArgument());</pre></td></tr>
-<tr> <td class="numLineCover"> 496</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 497</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"> 498</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"> 499</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setLastModified(<span class="keyword">new</span> Date(Long.parseLong(command.getArgument()) * 1000));</pre></td></tr>
-<tr> <td class="numLineCover"> 500</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 501</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> SECURE:</pre></td></tr>
-<tr> <td class="numLineCover"> 502</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setSecure(Boolean.parseBoolean(command.getArgument()));</pre></td></tr>
-<tr> <td class="numLineCover"> 503</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 504</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> ANCHOR_URI:</pre></td></tr>
-<tr> <td class="numLineCover"> 505</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> URI anchorUri = URI.create(command.getArgument());</pre></td></tr>
-<tr> <td class="numLineCover"> 506</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
-<tr> <td class="numLineCover"> 507</td> <td class="nbHitsUncovered"><a title="Line 507: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 507: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (command == <span class="keyword">null</span> || command.getOperation() != Operation.ANCHOR_TEXT) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 508</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"anchor-uri must be immediately followed by anchor-text"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 509</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 510</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.addAnchor(anchorUri, command.getArgument());</pre></td></tr>
-<tr> <td class="numLineCover"> 511</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 512</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> NO_INDEX:</pre></td></tr>
-<tr> <td class="numLineCover"> 513</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setNoIndex(Boolean.parseBoolean(command.getArgument()));</pre></td></tr>
-<tr> <td class="numLineCover"> 514</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 515</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> NO_FOLLOW:</pre></td></tr>
-<tr> <td class="numLineCover"> 516</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setNoFollow(Boolean.parseBoolean(command.getArgument()));</pre></td></tr>
-<tr> <td class="numLineCover"> 517</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 518</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> NO_ARCHIVE:</pre></td></tr>
-<tr> <td class="numLineCover"> 519</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setNoArchive(Boolean.parseBoolean(command.getArgument()));</pre></td></tr>
-<tr> <td class="numLineCover"> 520</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 521</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> DISPLAY_URL:</pre></td></tr>
-<tr> <td class="numLineCover"> 522</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setDisplayUrl(URI.create(command.getArgument()));</pre></td></tr>
-<tr> <td class="numLineCover"> 523</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 524</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"> 525</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setCrawlOnce(Boolean.parseBoolean(command.getArgument()));</pre></td></tr>
-<tr> <td class="numLineCover"> 526</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 527</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> LOCK:</pre></td></tr>
-<tr> <td class="numLineCover"> 528</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setLock(Boolean.parseBoolean(command.getArgument()));</pre></td></tr>
-<tr> <td class="numLineCover"> 529</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 530</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> ACL:</pre></td></tr>
-<tr> <td class="numLineCover"> 531</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> sendAclWithDocument = <span class="keyword">true</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 532</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 533</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> NAMESPACE:</pre></td></tr>
-<tr> <td class="numLineCover"> 534</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> namespace = command.getArgument();</pre></td></tr>
-<tr> <td class="numLineCover"> 535</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 536</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_PERMIT_USER:</pre></td></tr>
-<tr> <td class="numLineCover"> 537</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> permits.add(<span class="keyword">new</span> UserPrincipal(command.getArgument(), namespace));</pre></td></tr>
-<tr> <td class="numLineCover"> 538</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 539</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_DENY_USER:</pre></td></tr>
-<tr> <td class="numLineCover"> 540</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> denies.add(<span class="keyword">new</span> UserPrincipal(command.getArgument(), namespace));</pre></td></tr>
-<tr> <td class="numLineCover"> 541</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 542</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_PERMIT_GROUP:</pre></td></tr>
-<tr> <td class="numLineCover"> 543</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> permits.add(<span class="keyword">new</span> GroupPrincipal(command.getArgument(), namespace));</pre></td></tr>
-<tr> <td class="numLineCover"> 544</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 545</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_DENY_GROUP:</pre></td></tr>
-<tr> <td class="numLineCover"> 546</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> denies.add(<span class="keyword">new</span> GroupPrincipal(command.getArgument(), namespace));</pre></td></tr>
-<tr> <td class="numLineCover"> 547</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 548</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_INHERIT_FROM:</pre></td></tr>
-<tr> <td class="numLineCover"> 549</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> inheritFrom = <span class="keyword">new</span> DocId(command.getArgument());</pre></td></tr>
-<tr> <td class="numLineCover"> 550</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> aclBuilder.setInheritFrom(inheritFrom);</pre></td></tr>
-<tr> <td class="numLineCover"> 551</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 552</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_INHERIT_FRAGMENT:</pre></td></tr>
-<tr> <td class="numLineCover"> 553</td> <td class="nbHitsUncovered"><a title="Line 553: Conditional coverage 50% (1/2)."> 2</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 553: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == inheritFrom) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 554</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">"acl-inherit-fragment cannot preceed acl-inherit-from"</span>);</span></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"> 2</td> <td class="src"><pre class="src"> aclBuilder.setInheritFrom(inheritFrom, command.getArgument());</pre></td></tr>
-<tr> <td class="numLineCover"> 557</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 558</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_INHERITANCE_TYPE:</pre></td></tr>
-<tr> <td class="numLineCover"> 559</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Acl.InheritanceType type = STRING_TO_INHERITANCE_TYPE.get(command.getArgument());</pre></td></tr>
-<tr> <td class="numLineCover"> 560</td> <td class="nbHitsUncovered"><a title="Line 560: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 560: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == type) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 561</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">"invalid acl-inheritance-type: "</span> + command.getArgument());</span></pre></td></tr>
-<tr> <td class="numLine"> 562</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 563</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> aclBuilder.setInheritanceType(type);</pre></td></tr>
-<tr> <td class="numLineCover"> 564</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 565</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_CASE_SENSITIVE:</pre></td></tr>
-<tr> <td class="numLineCover"> 566</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> aclBuilder.setEverythingCaseSensitive();</pre></td></tr>
-<tr> <td class="numLineCover"> 567</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 568</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_CASE_INSENSITIVE:</pre></td></tr>
-<tr> <td class="numLineCover"> 569</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> aclBuilder.setEverythingCaseInsensitive();</pre></td></tr>
-<tr> <td class="numLineCover"> 570</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 571</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">default</span>:</pre></td></tr>
-<tr> <td class="numLineCover"> 572</td> <td class="nbHitsUncovered"><a title="Line 572: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 572: 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"> 573</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"> 574</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 575</td> <td class="nbHitsCovered"> 58</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
-<tr> <td class="numLine"> 576</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 577</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Finish by putting accumulated ACL into response.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 578</td> <td class="nbHitsCovered"><a title="Line 578: Conditional coverage 100% (2/2)."> 14</a></td> <td class="src"><pre class="src"> <a title="Line 578: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (sendAclWithDocument) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 579</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> aclBuilder.setPermits(permits);</pre></td></tr>
-<tr> <td class="numLineCover"> 580</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> aclBuilder.setDenies(denies);</pre></td></tr>
-<tr> <td class="numLineCover"> 581</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> response.setAcl(aclBuilder.build());</pre></td></tr>
-<tr> <td class="numLine"> 582</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 583</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 584</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 585</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 586</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"> 587</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"> 588</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"> 589</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
-<tr> <td class="numLine"> 590</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"> 591</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 592</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdPusher.Record readFromLister(DocIdPusher pusher, ExceptionHandler handler)</pre></td></tr>
-<tr> <td class="numLine"> 593</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"> 594</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"> 595</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"> 596</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> Command command = readCommand();</pre></td></tr>
-<tr> <td class="numLine"> 597</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 598</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Starting out at end-of-stream so don't send anything.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 599</td> <td class="nbHitsCovered"><a title="Line 599: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 599: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (command == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 600</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"> 601</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 602</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 603</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"> 604</td> <td class="nbHitsCovered"><a title="Line 604: Conditional coverage 100% (2/2)."> 9</a></td> <td class="src"><pre class="src"> <a title="Line 604: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (command.getOperation() != Operation.ID) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 605</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"> 606</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"> 607</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 452</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 608</td> <td class="nbHitsCovered"><a title="Line 608: Conditional coverage 100% (2/2)."> 30031</a></td> <td class="src"><pre class="src"> <a title="Line 608: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (command != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 609</td> <td class="nbHitsUncovered"><a title="Line 609: Conditional coverage 87% (7/8)."> 30023</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 609: Conditional coverage 87% (7/8)."> <span class="keyword">switch</span> (command.getOperation()) {</a></span></pre></td></tr>
-<tr> <td class="numLine"> 610</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 453</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 454</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> DocId foundDocId = <span class="keyword">new</span> DocId(command.getArgument());</pre></td></tr>
+<tr> <td class="numLineCover"> 455</td> <td class="nbHitsUncovered"><a title="Line 455: Conditional coverage 50% (1/2)."> 15</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 455: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!docId.equals(foundDocId)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 456</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">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"> 457</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"document "</span> + foundDocId + <span class="string">"."</span>);</pre></td></tr>
+<tr> <td class="numLine"> 458</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 459</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 460</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> sendAclWithDocument = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 461</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> Acl.Builder aclBuilder = <span class="keyword">new</span> Acl.Builder();</pre></td></tr>
+<tr> <td class="numLineCover"> 462</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> DocId inheritFrom = <span class="keyword">null</span>; <span class="comment">// saves inherit-from in case fragment comes</span></pre></td></tr>
+<tr> <td class="numLineCover"> 463</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> Set<Principal> permits = <span class="keyword">new</span> TreeSet<Principal>(); <span class="comment">// accumulates acl state</span></pre></td></tr>
+<tr> <td class="numLineCover"> 464</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> Set<Principal> denies = <span class="keyword">new</span> TreeSet<Principal>(); <span class="comment">// accumulates acl state</span></pre></td></tr>
+<tr> <td class="numLineCover"> 465</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> String namespace = Principal.DEFAULT_NAMESPACE; <span class="comment">// last given namespace</span></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="numLineCover"> 467</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
+<tr> <td class="numLineCover"> 468</td> <td class="nbHitsCovered"><a title="Line 468: Conditional coverage 100% (2/2)."> 72</a></td> <td class="src"><pre class="src"> <a title="Line 468: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (command != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 469</td> <td class="nbHitsUncovered"><a title="Line 469: Conditional coverage 85% (24/28)."> 58</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 469: Conditional coverage 85% (24/28)."> <span class="keyword">switch</span> (command.getOperation()) {</a></span></pre></td></tr>
+<tr> <td class="numLine"> 470</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">case</span> ID:</pre></td></tr>
-<tr> <td class="numLineCover"> 611</td> <td class="nbHitsCovered"><a title="Line 611: Conditional coverage 100% (2/2)."> 30015</a></td> <td class="src"><pre class="src"> <a title="Line 611: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (builder != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 612</td> <td class="nbHitsCovered"> 30007</td> <td class="src"><pre class="src"> result.add(builder.build());</pre></td></tr>
-<tr> <td class="numLine"> 613</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"> 614</td> <td class="nbHitsCovered"><a title="Line 614: Conditional coverage 100% (2/2)."> 30007</a></td> <td class="src"><pre class="src"> <a title="Line 614: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (result.size() >= 10000) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 615</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"> 616</td> <td class="nbHitsUncovered"><a title="Line 616: Conditional coverage 50% (1/2)."> 3</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 616: 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"> 617</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"> 618</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 619</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> result.clear();</pre></td></tr>
-<tr> <td class="numLine"> 620</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 621</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 471</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">"Only one document ID can be specified in a retriever message"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 472</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> CONTENT:</pre></td></tr>
+<tr> <td class="numLineCover"> 473</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> IOHelper.copyStream(inputStream, response.getOutputStream());</pre></td></tr>
+<tr> <td class="numLineCover"> 474</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 475</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> META_NAME:</pre></td></tr>
+<tr> <td class="numLineCover"> 476</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String metaName = command.getArgument();</pre></td></tr>
+<tr> <td class="numLineCover"> 477</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
+<tr> <td class="numLineCover"> 478</td> <td class="nbHitsUncovered"><a title="Line 478: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 478: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (command == <span class="keyword">null</span> || command.getOperation() != Operation.META_VALUE) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 479</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"meta-name must be immediately followed by meta-value"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 480</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 622</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"> 623</td> <td class="nbHitsCovered"> 30015</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 624</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 481</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"> 482</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"> 483</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> command.getArgument()});</pre></td></tr>
+<tr> <td class="numLineCover"> 484</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> response.addMetadata(metaName, command.getArgument());</pre></td></tr>
+<tr> <td class="numLineCover"> 485</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 486</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"> 487</td> <td class="nbHitsCovered"> 4</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"> 488</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> response.respondNotModified();</pre></td></tr>
+<tr> <td class="numLineCover"> 489</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 490</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"> 491</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"> 492</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"> 493</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"> 494</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"> 495</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"> 496</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> response.setContentType(command.getArgument());</pre></td></tr>
+<tr> <td class="numLineCover"> 497</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 498</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"> 625</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 499</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"> 626</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"> 627</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 628</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"> 629</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 630</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"> 631</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"> 632</td> <td class="nbHitsUncovered"><a title="Line 632: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 632: 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"> 633</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"> 634</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"> 635</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 636</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 637</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"> 638</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"> 639</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 640</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 500</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setLastModified(<span class="keyword">new</span> Date(Long.parseLong(command.getArgument()) * 1000));</pre></td></tr>
+<tr> <td class="numLineCover"> 501</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 502</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> SECURE:</pre></td></tr>
+<tr> <td class="numLineCover"> 503</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setSecure(Boolean.parseBoolean(command.getArgument()));</pre></td></tr>
+<tr> <td class="numLineCover"> 504</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 505</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> ANCHOR_URI:</pre></td></tr>
+<tr> <td class="numLineCover"> 506</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> URI anchorUri = URI.create(command.getArgument());</pre></td></tr>
+<tr> <td class="numLineCover"> 507</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
+<tr> <td class="numLineCover"> 508</td> <td class="nbHitsUncovered"><a title="Line 508: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 508: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (command == <span class="keyword">null</span> || command.getOperation() != Operation.ANCHOR_TEXT) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 509</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"anchor-uri must be immediately followed by anchor-text"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 510</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 511</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.addAnchor(anchorUri, command.getArgument());</pre></td></tr>
+<tr> <td class="numLineCover"> 512</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 513</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> NO_INDEX:</pre></td></tr>
+<tr> <td class="numLineCover"> 514</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setNoIndex(Boolean.parseBoolean(command.getArgument()));</pre></td></tr>
+<tr> <td class="numLineCover"> 515</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 516</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> NO_FOLLOW:</pre></td></tr>
+<tr> <td class="numLineCover"> 517</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setNoFollow(Boolean.parseBoolean(command.getArgument()));</pre></td></tr>
+<tr> <td class="numLineCover"> 518</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 519</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> NO_ARCHIVE:</pre></td></tr>
+<tr> <td class="numLineCover"> 520</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setNoArchive(Boolean.parseBoolean(command.getArgument()));</pre></td></tr>
+<tr> <td class="numLineCover"> 521</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 522</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> DISPLAY_URL:</pre></td></tr>
+<tr> <td class="numLineCover"> 523</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setDisplayUrl(URI.create(command.getArgument()));</pre></td></tr>
+<tr> <td class="numLineCover"> 524</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 525</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"> 641</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"> 642</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 643</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 526</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setCrawlOnce(Boolean.parseBoolean(command.getArgument()));</pre></td></tr>
+<tr> <td class="numLineCover"> 527</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 528</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">case</span> LOCK:</pre></td></tr>
-<tr> <td class="numLineCover"> 644</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"> 645</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 646</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> DELETE:</pre></td></tr>
-<tr> <td class="numLineCover"> 647</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"> 648</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 649</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 529</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> response.setLock(Boolean.parseBoolean(command.getArgument()));</pre></td></tr>
+<tr> <td class="numLineCover"> 530</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 531</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> ACL:</pre></td></tr>
+<tr> <td class="numLineCover"> 532</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> sendAclWithDocument = <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 533</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 534</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> NAMESPACE:</pre></td></tr>
+<tr> <td class="numLineCover"> 535</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> namespace = command.getArgument();</pre></td></tr>
+<tr> <td class="numLineCover"> 536</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 537</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_PERMIT_USER:</pre></td></tr>
+<tr> <td class="numLineCover"> 538</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> permits.add(<span class="keyword">new</span> UserPrincipal(command.getArgument(), namespace));</pre></td></tr>
+<tr> <td class="numLineCover"> 539</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 540</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_DENY_USER:</pre></td></tr>
+<tr> <td class="numLineCover"> 541</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> denies.add(<span class="keyword">new</span> UserPrincipal(command.getArgument(), namespace));</pre></td></tr>
+<tr> <td class="numLineCover"> 542</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 543</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_PERMIT_GROUP:</pre></td></tr>
+<tr> <td class="numLineCover"> 544</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> permits.add(<span class="keyword">new</span> GroupPrincipal(command.getArgument(), namespace));</pre></td></tr>
+<tr> <td class="numLineCover"> 545</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 546</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_DENY_GROUP:</pre></td></tr>
+<tr> <td class="numLineCover"> 547</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> denies.add(<span class="keyword">new</span> GroupPrincipal(command.getArgument(), namespace));</pre></td></tr>
+<tr> <td class="numLineCover"> 548</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 549</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_INHERIT_FROM:</pre></td></tr>
+<tr> <td class="numLineCover"> 550</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> inheritFrom = <span class="keyword">new</span> DocId(command.getArgument());</pre></td></tr>
+<tr> <td class="numLineCover"> 551</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> aclBuilder.setInheritFrom(inheritFrom);</pre></td></tr>
+<tr> <td class="numLineCover"> 552</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 553</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_INHERIT_FRAGMENT:</pre></td></tr>
+<tr> <td class="numLineCover"> 554</td> <td class="nbHitsUncovered"><a title="Line 554: Conditional coverage 50% (1/2)."> 2</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 554: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == inheritFrom) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 555</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"acl-inherit-fragment cannot preceed acl-inherit-from"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 556</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 557</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> aclBuilder.setInheritFrom(inheritFrom, command.getArgument());</pre></td></tr>
+<tr> <td class="numLineCover"> 558</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 559</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_INHERITANCE_TYPE:</pre></td></tr>
+<tr> <td class="numLineCover"> 560</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Acl.InheritanceType type = STRING_TO_INHERITANCE_TYPE.get(command.getArgument());</pre></td></tr>
+<tr> <td class="numLineCover"> 561</td> <td class="nbHitsUncovered"><a title="Line 561: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 561: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == type) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 562</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">"invalid acl-inheritance-type: "</span> + command.getArgument());</span></pre></td></tr>
+<tr> <td class="numLine"> 563</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 564</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> aclBuilder.setInheritanceType(type);</pre></td></tr>
+<tr> <td class="numLineCover"> 565</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 566</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_CASE_SENSITIVE:</pre></td></tr>
+<tr> <td class="numLineCover"> 567</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> aclBuilder.setEverythingCaseSensitive();</pre></td></tr>
+<tr> <td class="numLineCover"> 568</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 569</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> ACL_CASE_INSENSITIVE:</pre></td></tr>
+<tr> <td class="numLineCover"> 570</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> aclBuilder.setEverythingCaseInsensitive();</pre></td></tr>
+<tr> <td class="numLineCover"> 571</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 572</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">default</span>:</pre></td></tr>
-<tr> <td class="numLineCover"> 650</td> <td class="nbHitsUncovered"><a title="Line 650: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 650: 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"> 651</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"> 652</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 573</td> <td class="nbHitsUncovered"><a title="Line 573: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 573: 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"> 574</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>)</pre></td></tr>
+<tr> <td class="numLine"> 575</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"'"</span>);</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"> 653</td> <td class="nbHitsCovered"> 30023</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
-<tr> <td class="numLine"> 654</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 577</td> <td class="nbHitsCovered"> 58</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
+<tr> <td class="numLine"> 578</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 655</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> result.add(builder.build());</pre></td></tr>
-<tr> <td class="numLineCover"> 656</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"> 657</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 658</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 579</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Finish by putting accumulated ACL into response.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 580</td> <td class="nbHitsCovered"><a title="Line 580: Conditional coverage 100% (2/2)."> 14</a></td> <td class="src"><pre class="src"> <a title="Line 580: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (sendAclWithDocument) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 581</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> aclBuilder.setPermits(permits);</pre></td></tr>
+<tr> <td class="numLineCover"> 582</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> aclBuilder.setDenies(denies);</pre></td></tr>
+<tr> <td class="numLineCover"> 583</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> response.setAcl(aclBuilder.build());</pre></td></tr>
+<tr> <td class="numLine"> 584</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 585</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 586</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 659</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 587</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 660</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"> 661</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 588</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"> 589</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"> 590</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"> 591</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
-<tr> <td class="numLine"> 662</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"> 663</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"> 664</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 592</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"> 593</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 665</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"> 666</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 594</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdPusher.Record readFromLister(DocIdPusher pusher, ExceptionHandler handler)</pre></td></tr>
+<tr> <td class="numLine"> 595</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"> 596</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"> 597</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"> 598</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> Command command = readCommand();</pre></td></tr>
+<tr> <td class="numLine"> 599</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 667</td> <td class="nbHitsCovered"> 30149</td> <td class="src"><pre class="src"> Command result = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 668</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 669</td> <td class="nbHitsCovered"><a title="Line 669: Conditional coverage 100% (2/2)."> 60268</a></td> <td class="src"><pre class="src"> <a title="Line 669: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (result == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 670</td> <td class="nbHitsCovered"> 30151</td> <td class="src"><pre class="src"> String commandTokens[] = parseNextLine();</pre></td></tr>
-<tr> <td class="numLineCover"> 671</td> <td class="nbHitsCovered"><a title="Line 671: Conditional coverage 100% (2/2)."> 30146</a></td> <td class="src"><pre class="src"> <a title="Line 671: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (commandTokens == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 672</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 673</td> <td class="nbHitsCovered"><a title="Line 673: Conditional coverage 100% (2/2)."> 30120</a></td> <td class="src"><pre class="src"> <a title="Line 673: 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"> 674</td> <td class="nbHitsUncovered"><a title="Line 674: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 674: 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"> 675</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"> 676</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 677</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 678</td> <td class="nbHitsCovered"> 30119</td> <td class="src"><pre class="src"> Operation operation = STRING_TO_OPERATION.get(commandTokens[0]);</pre></td></tr>
-<tr> <td class="numLine"> 679</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"> 680</td> <td class="nbHitsCovered"><a title="Line 680: Conditional coverage 100% (2/2)."> 30119</a></td> <td class="src"><pre class="src"> <a title="Line 680: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (operation == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 681</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.warning(<span class="string">"Unrecognized command: "</span> + commandTokens[0]);</pre></td></tr>
-<tr> <td class="numLineCover"> 682</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
-<tr> <td class="numLine"> 683</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 684</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 685</td> <td class="nbHitsCovered"> 30117</td> <td class="src"><pre class="src"> String argument = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 686</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 687</td> <td class="nbHitsCovered"><a title="Line 687: Conditional coverage 100% (2/2)."> 30117</a></td> <td class="src"><pre class="src"> <a title="Line 687: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (commandTokens.length > 1) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 688</td> <td class="nbHitsCovered"> 30085</td> <td class="src"><pre class="src"> argument = commandTokens[1];</pre></td></tr>
-<tr> <td class="numLine"> 689</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 690</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 691</td> <td class="nbHitsCovered"> 30117</td> <td class="src"><pre class="src"> result = <span class="keyword">new</span> Command(operation, argument);</pre></td></tr>
-<tr> <td class="numLineCover"> 692</td> <td class="nbHitsCovered"> 30117</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 693</td> <td class="nbHitsCovered"> 30117</td> <td class="src"><pre class="src"> <span class="keyword">return</span> result;</pre></td></tr>
-<tr> <td class="numLine"> 694</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 695</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 696</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"> 697</td> <td class="nbHitsCovered"> 30151</td> <td class="src"><pre class="src"> checkHeader();</pre></td></tr>
-<tr> <td class="numLineCover"> 698</td> <td class="nbHitsCovered"> 30147</td> <td class="src"><pre class="src"> String line = <span class="string">""</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 699</td> <td class="nbHitsCovered"><a title="Line 699: Conditional coverage 100% (2/2)."> 60299</a></td> <td class="src"><pre class="src"> <a title="Line 699: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (line.length() == 0) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 700</td> <td class="nbHitsCovered"> 30179</td> <td class="src"><pre class="src"> line = readCharsUntilMarker(delimiter);</pre></td></tr>
-<tr> <td class="numLine"> 701</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"> 702</td> <td class="nbHitsCovered"><a title="Line 702: Conditional coverage 100% (2/2)."> 30178</a></td> <td class="src"><pre class="src"> <a title="Line 702: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (line == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 703</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 704</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 705</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"> 706</td> <td class="nbHitsCovered"><a title="Line 706: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 30152</a></td> <td class="src"><pre class="src"> <a title="Line 706: 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"> 707</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"> 708</td> <td class="nbHitsCovered"><a title="Line 708: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 30151</a></td> <td class="src"><pre class="src"> <a title="Line 708: 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"> 709</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"> 710</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"> 711</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 712</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 600</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"> 601</td> <td class="nbHitsCovered"><a title="Line 601: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 601: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (command == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 602</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"> 603</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 713</td> <td class="nbHitsCovered"><a title="Line 713: Conditional coverage 100% (2/2)."> 30120</a></td> <td class="src"><pre class="src"> <a title="Line 713: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (inIdList) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 714</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"> 604</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 605</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// The first operation must be a doc ID.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 606</td> <td class="nbHitsCovered"><a title="Line 606: Conditional coverage 100% (2/2)."> 9</a></td> <td class="src"><pre class="src"> <a title="Line 606: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (command.getOperation() != Operation.ID) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 607</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"> 608</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"> 609</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 610</td> <td class="nbHitsCovered"><a title="Line 610: Conditional coverage 100% (2/2)."> 30031</a></td> <td class="src"><pre class="src"> <a title="Line 610: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (command != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 611</td> <td class="nbHitsUncovered"><a title="Line 611: Conditional coverage 87% (7/8)."> 30023</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 611: Conditional coverage 87% (7/8)."> <span class="keyword">switch</span> (command.getOperation()) {</a></span></pre></td></tr>
+<tr> <td class="numLine"> 612</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> ID:</pre></td></tr>
+<tr> <td class="numLineCover"> 613</td> <td class="nbHitsCovered"><a title="Line 613: Conditional coverage 100% (2/2)."> 30015</a></td> <td class="src"><pre class="src"> <a title="Line 613: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (builder != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 614</td> <td class="nbHitsCovered"> 30007</td> <td class="src"><pre class="src"> result.add(builder.build());</pre></td></tr>
+<tr> <td class="numLine"> 615</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"> 616</td> <td class="nbHitsCovered"><a title="Line 616: Conditional coverage 100% (2/2)."> 30007</a></td> <td class="src"><pre class="src"> <a title="Line 616: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (result.size() >= 10000) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 617</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"> 618</td> <td class="nbHitsUncovered"><a title="Line 618: Conditional coverage 50% (1/2)."> 3</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 618: 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"> 619</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"> 620</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 621</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> result.clear();</pre></td></tr>
+<tr> <td class="numLine"> 622</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 623</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 624</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"> 625</td> <td class="nbHitsCovered"> 30015</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 626</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"> 627</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"> 628</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"> 629</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 630</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"> 631</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 632</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"> 633</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"> 634</td> <td class="nbHitsUncovered"><a title="Line 634: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 634: 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"> 635</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"> 636</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"> 637</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 638</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 639</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"> 640</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"> 641</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 642</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"> 643</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"> 644</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 645</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> LOCK:</pre></td></tr>
+<tr> <td class="numLineCover"> 646</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"> 647</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 648</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> DELETE:</pre></td></tr>
+<tr> <td class="numLineCover"> 649</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"> 650</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 651</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">default</span>:</pre></td></tr>
+<tr> <td class="numLineCover"> 652</td> <td class="nbHitsUncovered"><a title="Line 652: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 652: 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"> 653</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>)</pre></td></tr>
+<tr> <td class="numLine"> 654</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"'"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 655</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 656</td> <td class="nbHitsCovered"> 30023</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
+<tr> <td class="numLine"> 657</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 658</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> result.add(builder.build());</pre></td></tr>
+<tr> <td class="numLineCover"> 659</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"> 660</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 661</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 662</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 663</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"> 664</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 665</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"> 666</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"> 667</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 668</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"> 669</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 670</td> <td class="nbHitsCovered"> 30149</td> <td class="src"><pre class="src"> Command result = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 671</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 672</td> <td class="nbHitsCovered"><a title="Line 672: Conditional coverage 100% (2/2)."> 60268</a></td> <td class="src"><pre class="src"> <a title="Line 672: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (result == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 673</td> <td class="nbHitsCovered"> 30151</td> <td class="src"><pre class="src"> String commandTokens[] = parseNextLine();</pre></td></tr>
+<tr> <td class="numLineCover"> 674</td> <td class="nbHitsCovered"><a title="Line 674: Conditional coverage 100% (2/2)."> 30146</a></td> <td class="src"><pre class="src"> <a title="Line 674: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (commandTokens == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 675</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 676</td> <td class="nbHitsCovered"><a title="Line 676: Conditional coverage 100% (2/2)."> 30120</a></td> <td class="src"><pre class="src"> <a title="Line 676: 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"> 677</td> <td class="nbHitsUncovered"><a title="Line 677: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 677: 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"> 678</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"> 679</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 680</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 681</td> <td class="nbHitsCovered"> 30119</td> <td class="src"><pre class="src"> Operation operation = STRING_TO_OPERATION.get(commandTokens[0]);</pre></td></tr>
+<tr> <td class="numLine"> 682</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"> 683</td> <td class="nbHitsCovered"><a title="Line 683: Conditional coverage 100% (2/2)."> 30119</a></td> <td class="src"><pre class="src"> <a title="Line 683: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (operation == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 684</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.warning(<span class="string">"Unrecognized command: "</span> + commandTokens[0]);</pre></td></tr>
+<tr> <td class="numLineCover"> 685</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
+<tr> <td class="numLine"> 686</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 687</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 688</td> <td class="nbHitsCovered"> 30117</td> <td class="src"><pre class="src"> String argument = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 689</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 690</td> <td class="nbHitsCovered"><a title="Line 690: Conditional coverage 100% (2/2)."> 30117</a></td> <td class="src"><pre class="src"> <a title="Line 690: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (commandTokens.length > 1) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 691</td> <td class="nbHitsCovered"> 30085</td> <td class="src"><pre class="src"> argument = commandTokens[1];</pre></td></tr>
+<tr> <td class="numLine"> 692</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 693</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 694</td> <td class="nbHitsCovered"> 30117</td> <td class="src"><pre class="src"> result = <span class="keyword">new</span> Command(operation, argument);</pre></td></tr>
+<tr> <td class="numLineCover"> 695</td> <td class="nbHitsCovered"> 30117</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 696</td> <td class="nbHitsCovered"> 30117</td> <td class="src"><pre class="src"> <span class="keyword">return</span> result;</pre></td></tr>
+<tr> <td class="numLine"> 697</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 698</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 699</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"> 700</td> <td class="nbHitsCovered"> 30151</td> <td class="src"><pre class="src"> checkHeader();</pre></td></tr>
+<tr> <td class="numLineCover"> 701</td> <td class="nbHitsCovered"> 30147</td> <td class="src"><pre class="src"> String line = <span class="string">""</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 702</td> <td class="nbHitsCovered"><a title="Line 702: Conditional coverage 100% (2/2)."> 60299</a></td> <td class="src"><pre class="src"> <a title="Line 702: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (line.length() == 0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 703</td> <td class="nbHitsCovered"> 30179</td> <td class="src"><pre class="src"> line = readCharsUntilMarker(delimiter);</pre></td></tr>
+<tr> <td class="numLine"> 704</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"> 705</td> <td class="nbHitsCovered"><a title="Line 705: Conditional coverage 100% (2/2)."> 30178</a></td> <td class="src"><pre class="src"> <a title="Line 705: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (line == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 706</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 707</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 708</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"> 709</td> <td class="nbHitsCovered"><a title="Line 709: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 30152</a></td> <td class="src"><pre class="src"> <a title="Line 709: 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"> 710</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"> 711</td> <td class="nbHitsCovered"><a title="Line 711: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 30151</a></td> <td class="src"><pre class="src"> <a title="Line 711: 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"> 712</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"> 713</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"> 714</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 715</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 716</td> <td class="nbHitsCovered"> 30117</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"> 717</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 716</td> <td class="nbHitsCovered"><a title="Line 716: Conditional coverage 100% (2/2)."> 30120</a></td> <td class="src"><pre class="src"> <a title="Line 716: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (inIdList) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 717</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"> 718</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 719</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 719</td> <td class="nbHitsCovered"> 30117</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"> 720</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>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 721</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 722</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"> 723</td> <td class="nbHitsCovered"><a title="Line 723: Conditional coverage 100% (2/2)."> 30161</a></td> <td class="src"><pre class="src"> <a title="Line 723: 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"> 724</td> <td class="nbHitsCovered"> 30127</td> <td class="src"><pre class="src"> <span class="keyword">return</span>;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 723</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"> 724</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 725</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"> 726</td> <td class="nbHitsCovered"><a title="Line 726: Conditional coverage 100% (2/2)."> 30161</a></td> <td class="src"><pre class="src"> <a title="Line 726: 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"> 727</td> <td class="nbHitsCovered"> 30127</td> <td class="src"><pre class="src"> <span class="keyword">return</span>;</pre></td></tr>
+<tr> <td class="numLine"> 728</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 726</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 727</td> <td class="nbHitsCovered"> 34</td> <td class="src"><pre class="src"> String line = readCharsUntilMarker(<span class="string">"["</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 728</td> <td class="nbHitsUncovered"><a title="Line 728: Conditional coverage 66% (4/6) [each condition: 50%, 100%, 50%]."> 34</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 728: 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"> 729</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"> 730</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"> 731</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="numLineCover"> 730</td> <td class="nbHitsCovered"> 34</td> <td class="src"><pre class="src"> String line = readCharsUntilMarker(<span class="string">"["</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 731</td> <td class="nbHitsUncovered"><a title="Line 731: Conditional coverage 66% (4/6) [each condition: 50%, 100%, 50%]."> 34</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 731: 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"> 732</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 733</td> <td class="nbHitsCovered"> 33</td> <td class="src"><pre class="src"> String versionNumberString = line.substring(HEADER_PREFIX.length());</pre></td></tr>
-<tr> <td class="numLineCover"> 734</td> <td class="nbHitsUncovered"><a title="Line 734: Conditional coverage 50% (1/2)."> 33</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 734: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (versionNumberString.length() < 3) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 735</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"> 736</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="numLine"> 737</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"> 733</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"> 734</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 738</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 735</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 739</td> <td class="nbHitsCovered"> 33</td> <td class="src"><pre class="src"> delimiter = readCharsUntilMarker(<span class="string">"]"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 740</td> <td class="nbHitsUncovered"><a title="Line 740: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> 33</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 740: 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"> 741</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="numLineCover"> 736</td> <td class="nbHitsCovered"> 33</td> <td class="src"><pre class="src"> String versionNumberString = line.substring(HEADER_PREFIX.length());</pre></td></tr>
+<tr> <td class="numLineCover"> 737</td> <td class="nbHitsUncovered"><a title="Line 737: Conditional coverage 50% (1/2)."> 33</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 737: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (versionNumberString.length() < 3) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 738</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"> 739</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"</span></pre></td></tr>
+<tr> <td class="numLine"> 740</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">" and one trailing space."</span>);</pre></td></tr>
+<tr> <td class="numLine"> 741</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 742</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 743</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 744</td> <td class="nbHitsCovered"> 32</td> <td class="src"><pre class="src"> Pattern pattern = Pattern.compile(DISALLOWED_DELIMITER_CHARS_REGEX);</pre></td></tr>
-<tr> <td class="numLineCover"> 745</td> <td class="nbHitsCovered"> 32</td> <td class="src"><pre class="src"> Matcher matcher = pattern.matcher(delimiter);</pre></td></tr>
+<tr> <td class="numLineCover"> 743</td> <td class="nbHitsCovered"> 33</td> <td class="src"><pre class="src"> delimiter = readCharsUntilMarker(<span class="string">"]"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 744</td> <td class="nbHitsUncovered"><a title="Line 744: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> 33</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 744: 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"> 745</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"> 746</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 747</td> <td class="nbHitsCovered"><a title="Line 747: Conditional coverage 100% (2/2)."> 32</a></td> <td class="src"><pre class="src"> <a title="Line 747: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (matcher.find()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 748</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"> 749</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 747</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 748</td> <td class="nbHitsCovered"> 32</td> <td class="src"><pre class="src"> Pattern pattern = Pattern.compile(DISALLOWED_DELIMITER_CHARS_REGEX);</pre></td></tr>
+<tr> <td class="numLineCover"> 749</td> <td class="nbHitsCovered"> 32</td> <td class="src"><pre class="src"> Matcher matcher = pattern.matcher(delimiter);</pre></td></tr>
<tr> <td class="numLine"> 750</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 751</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 751</td> <td class="nbHitsCovered"><a title="Line 751: Conditional coverage 100% (2/2)."> 32</a></td> <td class="src"><pre class="src"> <a title="Line 751: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (matcher.find()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 752</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"> 753</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 754</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 755</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 752</td> <td class="nbHitsCovered"> 31</td> <td class="src"><pre class="src"> versionNumber = Integer.parseInt(versionNumberString.trim());</pre></td></tr>
-<tr> <td class="numLineCover"> 753</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"> 754</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"> 755</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 756</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 757</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 756</td> <td class="nbHitsCovered"> 31</td> <td class="src"><pre class="src"> versionNumber = Integer.parseInt(versionNumberString.trim());</pre></td></tr>
+<tr> <td class="numLineCover"> 757</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"> 758</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"> 759</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 760</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 761</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 758</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 762</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 759</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"> 760</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 761</td> <td class="nbHitsUncovered"><a title="Line 761: Conditional coverage 50% (1/2)."> 30246</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 761: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (marker.length == 0) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 762</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"> 763</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 764</td> <td class="nbHitsCovered"> 30246</td> <td class="src"><pre class="src"> ByteArrayOutputStream byteArrayOutputStream = <span class="keyword">new</span> ByteArrayOutputStream();</pre></td></tr>
-<tr> <td class="numLineCover"> 765</td> <td class="nbHitsCovered"> 30246</td> <td class="src"><pre class="src"> <span class="keyword">int</span> matchPosition = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 766</td> <td class="nbHitsCovered"> 30246</td> <td class="src"><pre class="src"> <span class="keyword">int</span> nextByte = 0;</pre></td></tr>
+ <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"> 764</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 765</td> <td class="nbHitsUncovered"><a title="Line 765: Conditional coverage 50% (1/2)."> 30246</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 765: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (marker.length == 0) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 766</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"> 767</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 768</td> <td class="nbHitsCovered"> 30246</td> <td class="src"><pre class="src"> ByteArrayOutputStream byteArrayOutputStream = <span class="keyword">new</span> ByteArrayOutputStream();</pre></td></tr>
+<tr> <td class="numLineCover"> 769</td> <td class="nbHitsCovered"> 30246</td> <td class="src"><pre class="src"> <span class="keyword">int</span> matchPosition = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 770</td> <td class="nbHitsCovered"> 30246</td> <td class="src"><pre class="src"> <span class="keyword">int</span> nextByte = 0;</pre></td></tr>
+<tr> <td class="numLine"> 771</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 768</td> <td class="nbHitsCovered"><a title="Line 768: Conditional coverage 100% (2/2)."> 382121</a></td> <td class="src"><pre class="src"> <a title="Line 768: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (matchPosition < marker.length) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 769</td> <td class="nbHitsCovered"> 351907</td> <td class="src"><pre class="src"> nextByte = inputStream.read();</pre></td></tr>
-<tr> <td class="numLineCover"> 770</td> <td class="nbHitsCovered"><a title="Line 770: Conditional coverage 100% (2/2)."> 351907</a></td> <td class="src"><pre class="src"> <a title="Line 770: 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"> 771</td> <td class="nbHitsCovered"> 30259</td> <td class="src"><pre class="src"> matchPosition += 1;</pre></td></tr>
-<tr> <td class="numLine"> 772</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 773</td> <td class="nbHitsUncovered"><a title="Line 773: Conditional coverage 50% (1/2)."> 321648</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 773: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (matchPosition > 0) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 774</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"> 775</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> matchPosition = 0;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 772</td> <td class="nbHitsCovered"><a title="Line 772: Conditional coverage 100% (2/2)."> 382121</a></td> <td class="src"><pre class="src"> <a title="Line 772: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (matchPosition < marker.length) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 773</td> <td class="nbHitsCovered"> 351907</td> <td class="src"><pre class="src"> nextByte = inputStream.read();</pre></td></tr>
+<tr> <td class="numLineCover"> 774</td> <td class="nbHitsCovered"><a title="Line 774: Conditional coverage 100% (2/2)."> 351907</a></td> <td class="src"><pre class="src"> <a title="Line 774: 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"> 775</td> <td class="nbHitsCovered"> 30259</td> <td class="src"><pre class="src"> matchPosition += 1;</pre></td></tr>
<tr> <td class="numLine"> 776</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 777</td> <td class="nbHitsCovered"><a title="Line 777: Conditional coverage 100% (2/2)."> 321648</a></td> <td class="src"><pre class="src"> <a title="Line 777: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (nextByte == -1) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 778</td> <td class="nbHitsCovered"> 32</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 779</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 780</td> <td class="nbHitsCovered"> 321616</td> <td class="src"><pre class="src"> byteArrayOutputStream.write(nextByte);</pre></td></tr>
-<tr> <td class="numLine"> 781</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 782</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 783</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 784</td> <td class="nbHitsCovered"> 30246</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] result = byteArrayOutputStream.toByteArray();</pre></td></tr>
-<tr> <td class="numLineCover"> 785</td> <td class="nbHitsCovered"><a title="Line 785: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 30246</a></td> <td class="src"><pre class="src"> <a title="Line 785: 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"> 786</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 787</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 788</td> <td class="nbHitsCovered"> 30220</td> <td class="src"><pre class="src"> <span class="keyword">return</span> result;</pre></td></tr>
-<tr> <td class="numLine"> 789</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 790</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 791</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 792</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"> 793</td> <td class="nbHitsCovered"> 30246</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] byteMarker = marker.getBytes(CHARSET);</pre></td></tr>
-<tr> <td class="numLineCover"> 794</td> <td class="nbHitsCovered"> 30246</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] bytes = readBytesUntilMarker(byteMarker);</pre></td></tr>
-<tr> <td class="numLineCover"> 795</td> <td class="nbHitsCovered"><a title="Line 795: Conditional coverage 100% (2/2)."> 30246</a></td> <td class="src"><pre class="src"> <a title="Line 795: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (bytes == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 796</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 797</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 798</td> <td class="nbHitsCovered"> 30220</td> <td class="src"><pre class="src"> bytes = convertModifiedUtf8ToStandardUtf8(bytes);</pre></td></tr>
-<tr> <td class="numLineCover"> 799</td> <td class="nbHitsCovered"> 30219</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"> 800</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 801</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 802</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 803</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Converts modified UTF-8 that supports 2-byte \n and \0 to standard UTF-8. It replaces</span></pre></td></tr>
-<tr> <td class="numLine"> 804</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * 0xC0 0x80 with 0x00 and 0xC0 0x8a with 0x0a.</span></pre></td></tr>
-<tr> <td class="numLine"> 805</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 806</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">byte</span>[] convertModifiedUtf8ToStandardUtf8(<span class="keyword">byte</span>[] bytes) <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLine"> 807</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Byte 0xC0 is always invalid in standard UTF-8, so its presence implies modified UTF-8.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 808</td> <td class="nbHitsCovered"> 30220</td> <td class="src"><pre class="src"> <span class="keyword">int</span> numberOfByteC0 = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 809</td> <td class="nbHitsCovered"><a title="Line 809: Conditional coverage 100% (2/2)."> 351836</a></td> <td class="src"><pre class="src"> <a title="Line 809: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < bytes.length; i++) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 810</td> <td class="nbHitsCovered"><a title="Line 810: Conditional coverage 100% (2/2)."> 321616</a></td> <td class="src"><pre class="src"> <a title="Line 810: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (bytes[i] == (<span class="keyword">byte</span>) 0xC0) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 811</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> numberOfByteC0++;</pre></td></tr>
-<tr> <td class="numLine"> 812</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 813</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 814</td> <td class="nbHitsCovered"><a title="Line 814: Conditional coverage 100% (2/2)."> 30220</a></td> <td class="src"><pre class="src"> <a title="Line 814: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (numberOfByteC0 == 0) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 815</td> <td class="nbHitsCovered"> 30218</td> <td class="src"><pre class="src"> <span class="keyword">return</span> bytes;</pre></td></tr>
-<tr> <td class="numLine"> 816</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 817</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// In UTF-8 if byte 0xC0 was valid, it would mean the code point is stored in two bytes.</span></pre></td></tr>
-<tr> <td class="numLine"> 818</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// In modified UTF-8, it means that we have stored \0 or \n in two bytes.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 819</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] newBytes = <span class="keyword">new</span> <span class="keyword">byte</span>[bytes.length - numberOfByteC0];</pre></td></tr>
-<tr> <td class="numLineCover"> 820</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> lastByteWasC0 = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 821</td> <td class="nbHitsCovered"><a title="Line 821: Conditional coverage 100% (2/2)."> 25</a></td> <td class="src"><pre class="src"> <a title="Line 821: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0, j = 0; i < bytes.length; i++) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 822</td> <td class="nbHitsCovered"><a title="Line 822: Conditional coverage 100% (2/2)."> 24</a></td> <td class="src"><pre class="src"> <a title="Line 822: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!lastByteWasC0) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 823</td> <td class="nbHitsCovered"><a title="Line 823: Conditional coverage 100% (2/2)."> 21</a></td> <td class="src"><pre class="src"> <a title="Line 823: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (bytes[i] == (<span class="keyword">byte</span>) 0xC0) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 824</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> lastByteWasC0 = <span class="keyword">true</span>;</pre></td></tr>
-<tr> <td class="numLine"> 825</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Don't copy C0, because we will encode the character as one byte.</span></pre></td></tr>
-<tr> <td class="numLine"> 826</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 827</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> newBytes[j++] = bytes[i];</pre></td></tr>
-<tr> <td class="numLine"> 828</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 829</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 830</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> lastByteWasC0 = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 831</td> <td class="nbHitsCovered"><a title="Line 831: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 831: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (bytes[i] == (<span class="keyword">byte</span>) 0x80) {</a></pre></td></tr>
-<tr> <td class="numLine"> 832</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Null character</span></pre></td></tr>
-<tr> <td class="numLineCover"> 833</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> newBytes[j++] = 0x00;</pre></td></tr>
-<tr> <td class="numLineCover"> 834</td> <td class="nbHitsCovered"><a title="Line 834: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 834: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (bytes[i] == (<span class="keyword">byte</span>) 0x8a) {</a></pre></td></tr>
-<tr> <td class="numLine"> 835</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Newline</span></pre></td></tr>
-<tr> <td class="numLineCover"> 836</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> newBytes[j++] = 0x0a;</pre></td></tr>
-<tr> <td class="numLine"> 837</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 838</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(</pre></td></tr>
-<tr> <td class="numLine"> 839</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"Invalid modified UTF-8 byte sequence: 192 "</span> + (bytes[i] & 0xff));</pre></td></tr>
-<tr> <td class="numLine"> 840</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 777</td> <td class="nbHitsUncovered"><a title="Line 777: Conditional coverage 50% (1/2)."> 321648</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 777: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (matchPosition > 0) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 778</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"> 779</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"> 780</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 841</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 781</td> <td class="nbHitsCovered"><a title="Line 781: Conditional coverage 100% (2/2)."> 321648</a></td> <td class="src"><pre class="src"> <a title="Line 781: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (nextByte == -1) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 782</td> <td class="nbHitsCovered"> 32</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 783</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 784</td> <td class="nbHitsCovered"> 321616</td> <td class="src"><pre class="src"> byteArrayOutputStream.write(nextByte);</pre></td></tr>
+<tr> <td class="numLine"> 785</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 786</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 842</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 787</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 843</td> <td class="nbHitsUncovered"><a title="Line 843: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 843: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (lastByteWasC0) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 844</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">"Invalid modified UTF-8 byte sequence: trailing 192"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 845</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 788</td> <td class="nbHitsCovered"> 30246</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] result = byteArrayOutputStream.toByteArray();</pre></td></tr>
+<tr> <td class="numLineCover"> 789</td> <td class="nbHitsCovered"><a title="Line 789: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 30246</a></td> <td class="src"><pre class="src"> <a title="Line 789: 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"> 790</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 791</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 792</td> <td class="nbHitsCovered"> 30220</td> <td class="src"><pre class="src"> <span class="keyword">return</span> result;</pre></td></tr>
+<tr> <td class="numLine"> 793</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 846</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> newBytes;</pre></td></tr>
-<tr> <td class="numLine"> 847</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 794</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 848</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 795</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 796</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"> 797</td> <td class="nbHitsCovered"> 30246</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] byteMarker = marker.getBytes(CHARSET);</pre></td></tr>
+<tr> <td class="numLineCover"> 798</td> <td class="nbHitsCovered"> 30246</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] bytes = readBytesUntilMarker(byteMarker);</pre></td></tr>
+<tr> <td class="numLineCover"> 799</td> <td class="nbHitsCovered"><a title="Line 799: Conditional coverage 100% (2/2)."> 30246</a></td> <td class="src"><pre class="src"> <a title="Line 799: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (bytes == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 800</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 801</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 802</td> <td class="nbHitsCovered"> 30220</td> <td class="src"><pre class="src"> bytes = convertModifiedUtf8ToStandardUtf8(bytes);</pre></td></tr>
+<tr> <td class="numLineCover"> 803</td> <td class="nbHitsCovered"> 30219</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"> 804</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 805</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 806</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 807</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Converts modified UTF-8 that supports 2-byte \n and \0 to standard UTF-8. It replaces</span></pre></td></tr>
+<tr> <td class="numLine"> 808</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * 0xC0 0x80 with 0x00 and 0xC0 0x8a with 0x0a.</span></pre></td></tr>
+<tr> <td class="numLine"> 809</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 810</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">byte</span>[] convertModifiedUtf8ToStandardUtf8(<span class="keyword">byte</span>[] bytes) <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLine"> 811</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Byte 0xC0 is always invalid in standard UTF-8, so its presence implies modified UTF-8.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 812</td> <td class="nbHitsCovered"> 30220</td> <td class="src"><pre class="src"> <span class="keyword">int</span> numberOfByteC0 = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 813</td> <td class="nbHitsCovered"><a title="Line 813: Conditional coverage 100% (2/2)."> 351836</a></td> <td class="src"><pre class="src"> <a title="Line 813: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < bytes.length; i++) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 814</td> <td class="nbHitsCovered"><a title="Line 814: Conditional coverage 100% (2/2)."> 321616</a></td> <td class="src"><pre class="src"> <a title="Line 814: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (bytes[i] == (<span class="keyword">byte</span>) 0xC0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 815</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> numberOfByteC0++;</pre></td></tr>
+<tr> <td class="numLine"> 816</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 817</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 818</td> <td class="nbHitsCovered"><a title="Line 818: Conditional coverage 100% (2/2)."> 30220</a></td> <td class="src"><pre class="src"> <a title="Line 818: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (numberOfByteC0 == 0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 819</td> <td class="nbHitsCovered"> 30218</td> <td class="src"><pre class="src"> <span class="keyword">return</span> bytes;</pre></td></tr>
+<tr> <td class="numLine"> 820</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 821</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// In UTF-8 if byte 0xC0 was valid, it would mean the code point is stored in two bytes.</span></pre></td></tr>
+<tr> <td class="numLine"> 822</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// In modified UTF-8, it means that we have stored \0 or \n in two bytes.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 823</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] newBytes = <span class="keyword">new</span> <span class="keyword">byte</span>[bytes.length - numberOfByteC0];</pre></td></tr>
+<tr> <td class="numLineCover"> 824</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> lastByteWasC0 = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 825</td> <td class="nbHitsCovered"><a title="Line 825: Conditional coverage 100% (2/2)."> 25</a></td> <td class="src"><pre class="src"> <a title="Line 825: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0, j = 0; i < bytes.length; i++) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 826</td> <td class="nbHitsCovered"><a title="Line 826: Conditional coverage 100% (2/2)."> 24</a></td> <td class="src"><pre class="src"> <a title="Line 826: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!lastByteWasC0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 827</td> <td class="nbHitsCovered"><a title="Line 827: Conditional coverage 100% (2/2)."> 21</a></td> <td class="src"><pre class="src"> <a title="Line 827: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (bytes[i] == (<span class="keyword">byte</span>) 0xC0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 828</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> lastByteWasC0 = <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLine"> 829</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Don't copy C0, because we will encode the character as one byte.</span></pre></td></tr>
+<tr> <td class="numLine"> 830</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 831</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> newBytes[j++] = bytes[i];</pre></td></tr>
+<tr> <td class="numLine"> 832</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 833</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 834</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> lastByteWasC0 = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 835</td> <td class="nbHitsCovered"><a title="Line 835: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 835: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (bytes[i] == (<span class="keyword">byte</span>) 0x80) {</a></pre></td></tr>
+<tr> <td class="numLine"> 836</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Null character</span></pre></td></tr>
+<tr> <td class="numLineCover"> 837</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> newBytes[j++] = 0x00;</pre></td></tr>
+<tr> <td class="numLineCover"> 838</td> <td class="nbHitsCovered"><a title="Line 838: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 838: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (bytes[i] == (<span class="keyword">byte</span>) 0x8a) {</a></pre></td></tr>
+<tr> <td class="numLine"> 839</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Newline</span></pre></td></tr>
+<tr> <td class="numLineCover"> 840</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> newBytes[j++] = 0x0a;</pre></td></tr>
+<tr> <td class="numLine"> 841</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 842</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(</pre></td></tr>
+<tr> <td class="numLine"> 843</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Invalid modified UTF-8 byte sequence: 192 "</span> + (bytes[i] & 0xff));</pre></td></tr>
+<tr> <td class="numLine"> 844</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 845</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 846</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 847</td> <td class="nbHitsUncovered"><a title="Line 847: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 847: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (lastByteWasC0) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 848</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">"Invalid modified UTF-8 byte sequence: trailing 192"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 849</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 850</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> newBytes;</pre></td></tr>
+<tr> <td class="numLine"> 851</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 852</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.Config.html b/coverage/com.google.enterprise.adaptor.Config.html
index 13645b9..ba2df5a 100644
--- a/coverage/com.google.enterprise.adaptor.Config.html
+++ b/coverage/com.google.enterprise.adaptor.Config.html
@@ -57,13 +57,13 @@
<tr> <td class="numLine"> 17</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.BufferedInputStream;</pre></td></tr>
<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> java.io.IOException;</pre></td></tr>
-<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> java.io.InputStreamReader;</pre></td></tr>
-<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.File;</pre></td></tr>
-<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.FileInputStream;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.io.IOException;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.io.InputStreamReader;</pre></td></tr>
<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.Reader;</pre></td></tr>
<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
@@ -538,7 +538,7 @@
<tr> <td class="numLine"> 293</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> String getGsaAdminHostname() {</pre></td></tr>
<tr> <td class="numLineCover"> 294</td> <td class="nbHitsCovered"> 45</td> <td class="src"><pre class="src"> String hostname = getValue(<span class="string">"gsa.admin.hostname"</span>).trim();</pre></td></tr>
-<tr> <td class="numLineCover"> 295</td> <td class="nbHitsUncovered"><a title="Line 295: Conditional coverage 50% (1/2)."> 45</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 295: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> (hostname.length() > 0)? hostname : getGsaHostname();</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 295</td> <td class="nbHitsUncovered"><a title="Line 295: Conditional coverage 50% (1/2)."> 45</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 295: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> (hostname.length() > 0) ? hostname : getGsaHostname();</a></span></pre></td></tr>
<tr> <td class="numLine"> 296</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 297</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.DocIdSender.html b/coverage/com.google.enterprise.adaptor.DocIdSender.html
index b8eff6e..c57a947 100644
--- a/coverage/com.google.enterprise.adaptor.DocIdSender.html
+++ b/coverage/com.google.enterprise.adaptor.DocIdSender.html
@@ -676,36 +676,38 @@
<tr> <td class="numLineCover"> 426</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> AclItem other = (AclItem) o;</pre></td></tr>
<tr> <td class="numLineCover"> 427</td> <td class="nbHitsUncovered"><a title="Line 427: Conditional coverage 40% (4/10) [each condition: 50%, 50%, 50%, 50%, 0%]."> 2</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 427: Conditional coverage 40% (4/10) [each condition: 50%, 50%, 50%, 50%, 0%]."> same = id.equals(other.id) && acl.equals(other.acl)</a></span></pre></td></tr>
<tr> <td class="numLine"> 428</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> && (docIdFragment == <span class="keyword">null</span> ? other.docIdFragment == <span class="keyword">null</span> :</pre></td></tr>
+ <td class="src"><pre class="src"> && (docIdFragment == <span class="keyword">null</span></pre></td></tr>
<tr> <td class="numLine"> 429</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> docIdFragment.equals(other.docIdFragment));</pre></td></tr>
+ <td class="src"><pre class="src"> ? other.docIdFragment == <span class="keyword">null</span></pre></td></tr>
<tr> <td class="numLine"> 430</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> : docIdFragment.equals(other.docIdFragment));</pre></td></tr>
+<tr> <td class="numLine"> 431</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 431</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> same;</pre></td></tr>
-<tr> <td class="numLine"> 432</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 432</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> same;</pre></td></tr>
<tr> <td class="numLine"> 433</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"> 434</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 435</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> hashCode() {</pre></td></tr>
-<tr> <td class="numLineCover"> 436</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Object members[] = <span class="keyword">new</span> Object[] { id, acl, docIdFragment };</pre></td></tr>
-<tr> <td class="numLineCover"> 437</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Arrays.hashCode(members);</pre></td></tr>
-<tr> <td class="numLine"> 438</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 439</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 440</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override </pre></td></tr>
-<tr> <td class="numLine"> 441</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> String toString() {</pre></td></tr>
-<tr> <td class="numLineCover"> 442</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="string">"AclItem("</span> + id + <span class="string">","</span> + docIdFragment + <span class="string">","</span> + acl + <span class="string">")"</span>;</pre></td></tr>
-<tr> <td class="numLine"> 443</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 435</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 436</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> hashCode() {</pre></td></tr>
+<tr> <td class="numLineCover"> 437</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Object members[] = <span class="keyword">new</span> Object[] { id, acl, docIdFragment };</pre></td></tr>
+<tr> <td class="numLineCover"> 438</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Arrays.hashCode(members);</pre></td></tr>
+<tr> <td class="numLine"> 439</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 440</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 441</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override </pre></td></tr>
+<tr> <td class="numLine"> 442</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String toString() {</pre></td></tr>
+<tr> <td class="numLineCover"> 443</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="string">"AclItem("</span> + id + <span class="string">","</span> + docIdFragment + <span class="string">","</span> + acl + <span class="string">")"</span>;</pre></td></tr>
<tr> <td class="numLine"> 444</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"> 445</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 446</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.DownloadDumpHandler.html b/coverage/com.google.enterprise.adaptor.DownloadDumpHandler.html
index cc1c592..df27c27 100644
--- a/coverage/com.google.enterprise.adaptor.DownloadDumpHandler.html
+++ b/coverage/com.google.enterprise.adaptor.DownloadDumpHandler.html
@@ -68,9 +68,9 @@
<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.FileInputStream;</pre></td></tr>
<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> java.io.InputStream;</pre></td></tr>
-<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.IOException;</pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.io.InputStream;</pre></td></tr>
<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.OutputStream;</pre></td></tr>
<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
@@ -262,7 +262,7 @@
<tr> <td class="numLineCover"> 145</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span>;</pre></td></tr>
<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 147</td> <td class="nbHitsCovered"><a title="Line 147: Conditional coverage 100% (2/2)."> 5</a></td> <td class="src"><pre class="src"> <a title="Line 147: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (File f: files) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 147</td> <td class="nbHitsCovered"><a title="Line 147: Conditional coverage 100% (2/2)."> 5</a></td> <td class="src"><pre class="src"> <a title="Line 147: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (File f : files) {</a></pre></td></tr>
<tr> <td class="numLine"> 148</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// avoid zipping the (empty) lock file</span></pre></td></tr>
<tr> <td class="numLineCover"> 149</td> <td class="nbHitsCovered"><a title="Line 149: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 149: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (f.getName().endsWith(<span class="string">".lck"</span>)) {</a></pre></td></tr>
diff --git a/coverage/com.google.enterprise.adaptor.GroupPrincipal.html b/coverage/com.google.enterprise.adaptor.GroupPrincipal.html
index 79a55c2..a03d869 100644
--- a/coverage/com.google.enterprise.adaptor.GroupPrincipal.html
+++ b/coverage/com.google.enterprise.adaptor.GroupPrincipal.html
@@ -83,7 +83,7 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> isUser() {</pre></td></tr>
-<tr> <td class="numLineCover"> 36</td> <td class="nbHitsCovered"> 899</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 36</td> <td class="nbHitsCovered"> 914</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">false</span>;</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="numLine"> 38</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.GsaVersion.html b/coverage/com.google.enterprise.adaptor.GsaVersion.html
index ecb58d7..e94c005 100644
--- a/coverage/com.google.enterprise.adaptor.GsaVersion.html
+++ b/coverage/com.google.enterprise.adaptor.GsaVersion.html
@@ -113,7 +113,7 @@
<tr> <td class="numLineCover"> 56</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> URLConnection conn = url.openConnection();</span></pre></td></tr>
<tr> <td class="numLineCover"> 57</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> InputStream in = conn.getInputStream();</span></pre></td></tr>
<tr> <td class="numLineCover"> 58</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String ver = IOHelper.readInputStreamToString(in, charset);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 59</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ver = ver.replaceAll(<span class="string">"\\s"</span>,<span class="string">""</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 59</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ver = ver.replaceAll(<span class="string">"\\s"</span>, <span class="string">""</span>);</span></pre></td></tr>
<tr> <td class="numLineCover"> 60</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">new</span> GsaVersion(ver);</span></pre></td></tr>
<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
diff --git a/coverage/com.google.enterprise.adaptor.IOHelper.html b/coverage/com.google.enterprise.adaptor.IOHelper.html
index 62606ef..7941913 100644
--- a/coverage/com.google.enterprise.adaptor.IOHelper.html
+++ b/coverage/com.google.enterprise.adaptor.IOHelper.html
@@ -95,8 +95,8 @@
<tr> <td class="numLineCover"> 39</td> <td class="nbHitsCovered"> 120</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"> 40</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">int</span> read;</pre></td></tr>
-<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"><a title="Line 41: Conditional coverage 100% (2/2)."> 643</a></td> <td class="src"><pre class="src"> <a title="Line 41: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> ((read = in.read(buffer)) != -1) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 524</td> <td class="src"><pre class="src"> out.write(buffer, 0, read);</pre></td></tr>
+<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"><a title="Line 41: Conditional coverage 100% (2/2)."> 258</a></td> <td class="src"><pre class="src"> <a title="Line 41: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> ((read = in.read(buffer)) != -1) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 139</td> <td class="src"><pre class="src"> out.write(buffer, 0, read);</pre></td></tr>
<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLineCover"> 44</td> <td class="nbHitsCovered"> 117</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 605466f..b7e7efc 100644
--- a/coverage/com.google.enterprise.adaptor.Journal.html
+++ b/coverage/com.google.enterprise.adaptor.Journal.html
@@ -377,8 +377,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"> 216</td> <td class="nbHitsCovered"> 1100</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = timeProvider.currentTimeMillis();</pre></td></tr>
<tr> <td class="numLineCover"> 217</td> <td class="nbHitsCovered"> 1100</td> <td class="src"><pre class="src"> <span class="keyword">long</span> startTime = time;</pre></td></tr>
-<tr> <td class="numLineCover"> 218</td> <td class="nbHitsCovered"><a title="Line 218: Conditional coverage 100% (2/2)."> 181595</a></td> <td class="src"><pre class="src"> <a title="Line 218: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (startTime == time) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 219</td> <td class="nbHitsCovered"> 180495</td> <td class="src"><pre class="src"> time = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 218</td> <td class="nbHitsCovered"><a title="Line 218: Conditional coverage 100% (2/2)."> 175319</a></td> <td class="src"><pre class="src"> <a title="Line 218: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (startTime == time) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 219</td> <td class="nbHitsCovered"> 174219</td> <td class="src"><pre class="src"> time = timeProvider.currentTimeMillis();</pre></td></tr>
<tr> <td class="numLine"> 220</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLineCover"> 221</td> <td class="nbHitsCovered"> 1100</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.Principal.html b/coverage/com.google.enterprise.adaptor.Principal.html
index 31b1b9f..a10cd4c 100644
--- a/coverage/com.google.enterprise.adaptor.Principal.html
+++ b/coverage/com.google.enterprise.adaptor.Principal.html
@@ -62,7 +62,7 @@
<td class="src"><pre class="src"> <span class="comment"> * Represents either a user or a group.</span></pre></td></tr>
<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 22</td> <td class="nbHitsCovered"> 672</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">class</span> Principal <span class="keyword">implements</span> Comparable<Principal> {</pre></td></tr>
+<tr> <td class="numLineCover"> 22</td> <td class="nbHitsCovered"> 684</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">class</span> Principal <span class="keyword">implements</span> Comparable<Principal> {</pre></td></tr>
<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String DEFAULT_NAMESPACE = <span class="string">"Default"</span>;</pre></td></tr>
<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
@@ -167,24 +167,24 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> compareTo(Principal other) {</pre></td></tr>
-<tr> <td class="numLineCover"> 86</td> <td class="nbHitsCovered"> 672</td> <td class="src"><pre class="src"> <span class="keyword">int</span> spacecmp = namespace.compareTo(other.namespace);</pre></td></tr>
-<tr> <td class="numLineCover"> 87</td> <td class="nbHitsCovered"><a title="Line 87: Conditional coverage 100% (2/2)."> 672</a></td> <td class="src"><pre class="src"> <a title="Line 87: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (0 != spacecmp) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 88</td> <td class="nbHitsCovered"> 162</td> <td class="src"><pre class="src"> <span class="keyword">return</span> spacecmp;</pre></td></tr>
+<tr> <td class="numLineCover"> 86</td> <td class="nbHitsCovered"> 684</td> <td class="src"><pre class="src"> <span class="keyword">int</span> spacecmp = namespace.compareTo(other.namespace);</pre></td></tr>
+<tr> <td class="numLineCover"> 87</td> <td class="nbHitsCovered"><a title="Line 87: Conditional coverage 100% (2/2)."> 684</a></td> <td class="src"><pre class="src"> <a title="Line 87: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (0 != spacecmp) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 88</td> <td class="nbHitsCovered"> 165</td> <td class="src"><pre class="src"> <span class="keyword">return</span> spacecmp;</pre></td></tr>
<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// OK, same namespace</span></pre></td></tr>
<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 92</td> <td class="nbHitsCovered"><a title="Line 92: Conditional coverage 100% (2/2)."> 510</a></td> <td class="src"><pre class="src"> <a title="Line 92: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (isUser() != other.isUser()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"><a title="Line 93: Conditional coverage 100% (2/2)."> 44</a></td> <td class="src"><pre class="src"> <a title="Line 93: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> isUser() ? -1 : 1;</a></pre></td></tr>
+<tr> <td class="numLineCover"> 92</td> <td class="nbHitsCovered"><a title="Line 92: Conditional coverage 100% (2/2)."> 519</a></td> <td class="src"><pre class="src"> <a title="Line 92: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (isUser() != other.isUser()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"><a title="Line 93: Conditional coverage 100% (2/2)."> 52</a></td> <td class="src"><pre class="src"> <a title="Line 93: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> isUser() ? -1 : 1;</a></pre></td></tr>
<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// OK, same namespace and same type</span></pre></td></tr>
<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 97</td> <td class="nbHitsCovered"> 466</td> <td class="src"><pre class="src"> <span class="keyword">return</span> name.compareTo(other.name);</pre></td></tr>
+<tr> <td class="numLineCover"> 97</td> <td class="nbHitsCovered"> 467</td> <td class="src"><pre class="src"> <span class="keyword">return</span> name.compareTo(other.name);</pre></td></tr>
<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.ShutdownWaiter.html b/coverage/com.google.enterprise.adaptor.ShutdownWaiter.html
index 6c33ca9..f6d9533 100644
--- a/coverage/com.google.enterprise.adaptor.ShutdownWaiter.html
+++ b/coverage/com.google.enterprise.adaptor.ShutdownWaiter.html
@@ -135,15 +135,15 @@
<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Wait for all requests to complete processing.</span></pre></td></tr>
<tr> <td class="numLineCover"> 61</td> <td class="nbHitsCovered"><a title="Line 61: Conditional coverage 100% (2/2)."> 19</a></td> <td class="src"><pre class="src"> <a title="Line 61: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!lock.writeLock().tryLock(time, unit)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 62</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 62</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// stopped == true guarantees no future request processing and obtaining the</span></pre></td></tr>
<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// lock guarantees no current request processing.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> lock.writeLock().unlock();</pre></td></tr>
-<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> lock.writeLock().unlock();</pre></td></tr>
+<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.StatRpcMethod.html b/coverage/com.google.enterprise.adaptor.StatRpcMethod.html
index 79a1317..ae3626b 100644
--- a/coverage/com.google.enterprise.adaptor.StatRpcMethod.html
+++ b/coverage/com.google.enterprise.adaptor.StatRpcMethod.html
@@ -54,233 +54,231 @@
<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.IOException;</pre></td></tr>
<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.ArrayList;</pre></td></tr>
-<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.List;</pre></td></tr>
-<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Locale;</pre></td></tr>
-<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Map;</pre></td></tr>
-<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.TreeMap;</pre></td></tr>
-<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.logging.Level;</pre></td></tr>
-<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.logging.Logger;</pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * Provides performance data when responding to </span></pre></td></tr>
-<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * ajax calls from dashboard.</span></pre></td></tr>
-<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">class</span> StatRpcMethod <span class="keyword">implements</span> RpcHandler.RpcMethod {</pre></td></tr>
-<tr> <td class="numLineCover"> 33</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">private</span> String adaptorVersion = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 32</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">private</span> String adaptorVersion = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> String adaptorType;</pre></td></tr>
-<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> Journal journal;</pre></td></tr>
-<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> isAdaptorIncremental;</pre></td></tr>
-<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> File configFile;</pre></td></tr>
-<tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Logger log</pre></td></tr>
-<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 37</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Logger log</pre></td></tr>
+<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = Logger.getLogger(StatRpcMethod.<span class="keyword">class</span>.getName());</pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> StatRpcMethod(Journal journal, Adaptor adaptor,</pre></td></tr>
-<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> isAdaptorIncremental, File configFile) {</pre></td></tr>
-<tr> <td class="numLineCover"> 43</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.journal = journal;</pre></td></tr>
-<tr> <td class="numLineCover"> 44</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.isAdaptorIncremental = isAdaptorIncremental;</pre></td></tr>
-<tr> <td class="numLineCover"> 45</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.configFile = configFile;</pre></td></tr>
-<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> isAdaptorIncremental, File configFile) {</pre></td></tr>
+<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.journal = journal;</pre></td></tr>
+<tr> <td class="numLineCover"> 43</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.isAdaptorIncremental = isAdaptorIncremental;</pre></td></tr>
+<tr> <td class="numLineCover"> 44</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.configFile = configFile;</pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 47</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> Class adaptorClass = adaptor.getClass();</pre></td></tr>
-<tr> <td class="numLineCover"> 48</td> <td class="nbHitsUncovered"><a title="Line 48: Conditional coverage 50% (1/2)."> 19</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 48: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (adaptorClass.getPackage() != <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 49</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> adaptorVersion = adaptorClass.getPackage().getImplementationVersion();</pre></td></tr>
-<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 46</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> Class adaptorClass = adaptor.getClass();</pre></td></tr>
+<tr> <td class="numLineCover"> 47</td> <td class="nbHitsUncovered"><a title="Line 47: Conditional coverage 50% (1/2)."> 19</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 47: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (adaptorClass.getPackage() != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 48</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> adaptorVersion = adaptorClass.getPackage().getImplementationVersion();</pre></td></tr>
+<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 51</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> adaptorType = adaptorClass.getSimpleName();</pre></td></tr>
-<tr> <td class="numLineCover"> 52</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 50</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> adaptorType = adaptorClass.getSimpleName();</pre></td></tr>
+<tr> <td class="numLineCover"> 51</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> Object run(List request) {</pre></td></tr>
-<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// TODO(ejona): choose locale based on Accept-Languages.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 57</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Locale locale = Locale.ENGLISH;</pre></td></tr>
-<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Locale locale = Locale.ENGLISH;</pre></td></tr>
+<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 59</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Journal.JournalSnapshot journalSnap = journal.getSnapshot();</pre></td></tr>
-<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 58</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Journal.JournalSnapshot journalSnap = journal.getSnapshot();</pre></td></tr>
+<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 61</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Map<String, Object> map = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
+<tr> <td class="numLineCover"> 60</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Map<String, Object> map = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
+<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> {</pre></td></tr>
-<tr> <td class="numLineCover"> 64</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Map<String, Object> simple = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
-<tr> <td class="numLineCover"> 65</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"isIncrementalSupported"</span>, isAdaptorIncremental);</pre></td></tr>
-<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"numTotalDocIdsPushed"</span>, journalSnap.numTotalDocIdsPushed);</pre></td></tr>
-<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"numUniqueDocIdsPushed"</span>, journalSnap.numUniqueDocIdsPushed);</pre></td></tr>
-<tr> <td class="numLineCover"> 68</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"numTotalGsaRequests"</span>, journalSnap.numTotalGsaRequests);</pre></td></tr>
-<tr> <td class="numLineCover"> 69</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"numUniqueGsaRequests"</span>, journalSnap.numUniqueGsaRequests);</pre></td></tr>
-<tr> <td class="numLineCover"> 70</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"numTotalNonGsaRequests"</span>, journalSnap.numTotalNonGsaRequests);</pre></td></tr>
-<tr> <td class="numLineCover"> 71</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"numUniqueNonGsaRequests"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 63</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Map<String, Object> simple = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
+<tr> <td class="numLineCover"> 64</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"isIncrementalSupported"</span>, isAdaptorIncremental);</pre></td></tr>
+<tr> <td class="numLineCover"> 65</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"numTotalDocIdsPushed"</span>, journalSnap.numTotalDocIdsPushed);</pre></td></tr>
+<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"numUniqueDocIdsPushed"</span>, journalSnap.numUniqueDocIdsPushed);</pre></td></tr>
+<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"numTotalGsaRequests"</span>, journalSnap.numTotalGsaRequests);</pre></td></tr>
+<tr> <td class="numLineCover"> 68</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"numUniqueGsaRequests"</span>, journalSnap.numUniqueGsaRequests);</pre></td></tr>
+<tr> <td class="numLineCover"> 69</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"numTotalNonGsaRequests"</span>, journalSnap.numTotalNonGsaRequests);</pre></td></tr>
+<tr> <td class="numLineCover"> 70</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"numUniqueNonGsaRequests"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> journalSnap.numUniqueNonGsaRequests);</pre></td></tr>
-<tr> <td class="numLineCover"> 73</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"timeResolution"</span>, journalSnap.timeResolution);</pre></td></tr>
-<tr> <td class="numLineCover"> 74</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"lastSuccessfulFullPushStart"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 72</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"timeResolution"</span>, journalSnap.timeResolution);</pre></td></tr>
+<tr> <td class="numLineCover"> 73</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"lastSuccessfulFullPushStart"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> journalSnap.lastSuccessfulFullPushStart);</pre></td></tr>
-<tr> <td class="numLineCover"> 76</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"lastSuccessfulFullPushEnd"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 75</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"lastSuccessfulFullPushEnd"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> journalSnap.lastSuccessfulFullPushEnd);</pre></td></tr>
-<tr> <td class="numLineCover"> 78</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"currentFullPushStart"</span>, journalSnap.currentFullPushStart);</pre></td></tr>
-<tr> <td class="numLineCover"> 79</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"lastSuccessfulIncrementalPushStart"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 77</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"currentFullPushStart"</span>, journalSnap.currentFullPushStart);</pre></td></tr>
+<tr> <td class="numLineCover"> 78</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"lastSuccessfulIncrementalPushStart"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> journalSnap.lastSuccessfulIncrementalPushStart);</pre></td></tr>
-<tr> <td class="numLineCover"> 81</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"lastSuccessfulIncrementalPushEnd"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 80</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"lastSuccessfulIncrementalPushEnd"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> journalSnap.lastSuccessfulIncrementalPushEnd);</pre></td></tr>
-<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"currentIncrementalPushStart"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 82</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"currentIncrementalPushStart"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> journalSnap.currentIncrementalPushStart);</pre></td></tr>
-<tr> <td class="numLineCover"> 85</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"whenStarted"</span>, journalSnap.whenStarted);</pre></td></tr>
-<tr> <td class="numLineCover"> 86</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> map.put(<span class="string">"simpleStats"</span>, simple);</pre></td></tr>
+<tr> <td class="numLineCover"> 84</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> simple.put(<span class="string">"whenStarted"</span>, journalSnap.whenStarted);</pre></td></tr>
+<tr> <td class="numLineCover"> 85</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> map.put(<span class="string">"simpleStats"</span>, simple);</pre></td></tr>
+<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 87</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"> 88</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> {</pre></td></tr>
-<tr> <td class="numLineCover"> 90</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Map<String, Object> versionMap = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
-<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 89</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Map<String, Object> versionMap = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
+<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 92</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"versionJvm"</span>, System.getProperty(<span class="string">"java.version"</span>));</pre></td></tr>
-<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"versionAdaptorLibrary"</span>, getAdaptorLibraryVersion(locale));</pre></td></tr>
-<tr> <td class="numLineCover"> 94</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"typeAdaptor"</span>, adaptorType);</pre></td></tr>
-<tr> <td class="numLineCover"> 95</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"versionAdaptor"</span>, getAdaptorVersion(locale));</pre></td></tr>
-<tr> <td class="numLineCover"> 96</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"cwd"</span>, System.getProperty(<span class="string">"user.dir"</span>));</pre></td></tr>
-<tr> <td class="numLineCover"> 97</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"configFileName"</span>, getConfigFilename(locale));</pre></td></tr>
-<tr> <td class="numLineCover"> 98</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> map.put(<span class="string">"versionStats"</span>, versionMap);</pre></td></tr>
+<tr> <td class="numLineCover"> 91</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"versionJvm"</span>, System.getProperty(<span class="string">"java.version"</span>));</pre></td></tr>
+<tr> <td class="numLineCover"> 92</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"versionAdaptorLibrary"</span>, getAdaptorLibraryVersion(locale));</pre></td></tr>
+<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"typeAdaptor"</span>, adaptorType);</pre></td></tr>
+<tr> <td class="numLineCover"> 94</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"versionAdaptor"</span>, getAdaptorVersion(locale));</pre></td></tr>
+<tr> <td class="numLineCover"> 95</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"cwd"</span>, System.getProperty(<span class="string">"user.dir"</span>));</pre></td></tr>
+<tr> <td class="numLineCover"> 96</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> versionMap.put(<span class="string">"configFileName"</span>, getConfigFilename(locale));</pre></td></tr>
+<tr> <td class="numLineCover"> 97</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> map.put(<span class="string">"versionStats"</span>, versionMap);</pre></td></tr>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 99</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"> 100</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> {</pre></td></tr>
-<tr> <td class="numLineCover"> 102</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> List<Object> statsList = <span class="keyword">new</span> ArrayList<Object>();</pre></td></tr>
-<tr> <td class="numLineCover"> 103</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">long</span> currentTime = journalSnap.currentTime;</pre></td></tr>
-<tr> <td class="numLineCover"> 104</td> <td class="nbHitsCovered"><a title="Line 104: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 104: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Journal.Stats stats : journalSnap.timeStats) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 105</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Map<String, Object> stat = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
-<tr> <td class="numLineCover"> 106</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> stat.put(<span class="string">"snapshotDuration"</span>, stats.snapshotDurationMs);</pre></td></tr>
-<tr> <td class="numLineCover"> 107</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> stat.put(<span class="string">"currentTime"</span>, currentTime);</pre></td></tr>
-<tr> <td class="numLineCover"> 108</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> List<Map<String, Object>> statData</pre></td></tr>
-<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 101</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> List<Object> statsList = <span class="keyword">new</span> ArrayList<Object>();</pre></td></tr>
+<tr> <td class="numLineCover"> 102</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">long</span> currentTime = journalSnap.currentTime;</pre></td></tr>
+<tr> <td class="numLineCover"> 103</td> <td class="nbHitsCovered"><a title="Line 103: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 103: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Journal.Stats stats : journalSnap.timeStats) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 104</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Map<String, Object> stat = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
+<tr> <td class="numLineCover"> 105</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> stat.put(<span class="string">"snapshotDuration"</span>, stats.snapshotDurationMs);</pre></td></tr>
+<tr> <td class="numLineCover"> 106</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> stat.put(<span class="string">"currentTime"</span>, currentTime);</pre></td></tr>
+<tr> <td class="numLineCover"> 107</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> List<Map<String, Object>> statData</pre></td></tr>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = <span class="keyword">new</span> ArrayList<Map<String, Object>>(stats.stats.length);</pre></td></tr>
-<tr> <td class="numLineCover"> 110</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = stats.pendingStatPeriodEnd;</pre></td></tr>
-<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 109</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = stats.pendingStatPeriodEnd;</pre></td></tr>
+<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Rewind to beginning</span></pre></td></tr>
-<tr> <td class="numLineCover"> 112</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> time -= stats.stats.length * stats.snapshotDurationMs;</pre></td></tr>
-<tr> <td class="numLineCover"> 113</td> <td class="nbHitsCovered"><a title="Line 113: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 113: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = stats.currentStat + 1; i < stats.stats.length; i++) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 114</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statData.add(getStat(stats.stats[i], time));</pre></td></tr>
-<tr> <td class="numLineCover"> 115</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> time += stats.snapshotDurationMs;</pre></td></tr>
-<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 111</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> time -= stats.stats.length * stats.snapshotDurationMs;</pre></td></tr>
+<tr> <td class="numLineCover"> 112</td> <td class="nbHitsCovered"><a title="Line 112: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 112: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = stats.currentStat + 1; i < stats.stats.length; i++) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 113</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statData.add(getStat(stats.stats[i], time));</pre></td></tr>
+<tr> <td class="numLineCover"> 114</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> time += stats.snapshotDurationMs;</pre></td></tr>
+<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 117</td> <td class="nbHitsCovered"><a title="Line 117: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 117: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i <= stats.currentStat; i++) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statData.add(getStat(stats.stats[i], time));</pre></td></tr>
-<tr> <td class="numLineCover"> 119</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> time += stats.snapshotDurationMs;</pre></td></tr>
-<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 116</td> <td class="nbHitsCovered"><a title="Line 116: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 116: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i <= stats.currentStat; i++) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 117</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statData.add(getStat(stats.stats[i], time));</pre></td></tr>
+<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> time += stats.snapshotDurationMs;</pre></td></tr>
+<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 121</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> stat.put(<span class="string">"statData"</span>, statData);</pre></td></tr>
-<tr> <td class="numLineCover"> 122</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statsList.add(stat);</pre></td></tr>
-<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 120</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> stat.put(<span class="string">"statData"</span>, statData);</pre></td></tr>
+<tr> <td class="numLineCover"> 121</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statsList.add(stat);</pre></td></tr>
+<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 124</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> map.put(<span class="string">"stats"</span>, statsList);</pre></td></tr>
-<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 123</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> map.put(<span class="string">"stats"</span>, statsList);</pre></td></tr>
+<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 126</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 127</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> map;</pre></td></tr>
+<tr> <td class="numLineCover"> 126</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> map;</pre></td></tr>
+<tr> <td class="numLine"> 127</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> Map<String, Object> getStat(Journal.Stat stat, <span class="keyword">long</span> time) {</pre></td></tr>
-<tr> <td class="numLineCover"> 131</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> Map<String, Object> statMap = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
-<tr> <td class="numLineCover"> 132</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"time"</span>, time);</pre></td></tr>
-<tr> <td class="numLineCover"> 133</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsCount"</span>, stat.requestProcessingsCount);</pre></td></tr>
-<tr> <td class="numLineCover"> 134</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsDurationSum"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 130</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> Map<String, Object> statMap = <span class="keyword">new</span> TreeMap<String, Object>();</pre></td></tr>
+<tr> <td class="numLineCover"> 131</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"time"</span>, time);</pre></td></tr>
+<tr> <td class="numLineCover"> 132</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsCount"</span>, stat.requestProcessingsCount);</pre></td></tr>
+<tr> <td class="numLineCover"> 133</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsDurationSum"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> stat.requestProcessingsDurationSum);</pre></td></tr>
-<tr> <td class="numLineCover"> 136</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsMaxDuration"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 135</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsMaxDuration"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> stat.requestProcessingsMaxDuration);</pre></td></tr>
-<tr> <td class="numLineCover"> 138</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsThroughput"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 137</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> statMap.put(<span class="string">"requestProcessingsThroughput"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> stat.requestProcessingsThroughput);</pre></td></tr>
-<tr> <td class="numLineCover"> 140</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> statMap;</pre></td></tr>
+<tr> <td class="numLineCover"> 139</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> statMap;</pre></td></tr>
+<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 142</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> String getAdaptorLibraryVersion(Locale locale) {</pre></td></tr>
-<tr> <td class="numLineCover"> 144</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> String version = <span class="keyword">this</span>.getClass().getPackage().getImplementationVersion();</pre></td></tr>
-<tr> <td class="numLineCover"> 145</td> <td class="nbHitsUncovered"><a title="Line 145: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 145: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> version == <span class="keyword">null</span> ?</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 143</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> String version = <span class="keyword">this</span>.getClass().getPackage().getImplementationVersion();</pre></td></tr>
+<tr> <td class="numLineCover"> 144</td> <td class="nbHitsUncovered"><a title="Line 144: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 144: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> version == <span class="keyword">null</span></a></span></pre></td></tr>
+<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ? Translation.STATS_VERSION_UNKNOWN.toString(locale) : version;</pre></td></tr>
<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Translation.STATS_VERSION_UNKNOWN.toString(locale) : version;</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 147</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"> 148</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 149</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> String getAdaptorVersion(Locale locale) {</pre></td></tr>
-<tr> <td class="numLineCover"> 150</td> <td class="nbHitsUncovered"><a title="Line 150: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 150: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> adaptorVersion == <span class="keyword">null</span> ?</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 149</td> <td class="nbHitsUncovered"><a title="Line 149: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 149: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> adaptorVersion == <span class="keyword">null</span></a></span></pre></td></tr>
+<tr> <td class="numLine"> 150</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ? Translation.STATS_VERSION_UNKNOWN.toString(locale) : adaptorVersion;</pre></td></tr>
<tr> <td class="numLine"> 151</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Translation.STATS_VERSION_UNKNOWN.toString(locale) : adaptorVersion;</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 152</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"> 153</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 154</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> String getConfigFilename(Locale locale) {</pre></td></tr>
-<tr> <td class="numLineCover"> 155</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> File canonicalConfigFile = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 156</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 154</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> File canonicalConfigFile = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 155</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 157</td> <td class="nbHitsUncovered"><a title="Line 157: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 157: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (configFile != <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 158</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> canonicalConfigFile = configFile.getCanonicalFile();</span></pre></td></tr>
-<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 156</td> <td class="nbHitsUncovered"><a title="Line 156: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 156: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (configFile != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 157</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> canonicalConfigFile = configFile.getCanonicalFile();</span></pre></td></tr>
+<tr> <td class="numLine"> 158</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 160</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException e) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 161</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Could not determine file location for \""</span></span></pre></td></tr>
-<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 159</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 160</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Could not determine file location for \""</span></span></pre></td></tr>
+<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> + configFile + <span class="string">"\""</span>, e);</pre></td></tr>
-<tr> <td class="numLine"> 163</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// treat file as if it were not specified -- leave it null below</span></pre></td></tr>
-<tr> <td class="numLineCover"> 164</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 165</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 163</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 164</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 166</td> <td class="nbHitsUncovered"><a title="Line 166: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 166: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> canonicalConfigFile == <span class="keyword">null</span> ?</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 165</td> <td class="nbHitsUncovered"><a title="Line 165: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 165: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> canonicalConfigFile == <span class="keyword">null</span></a></span></pre></td></tr>
+<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ? Translation.STATS_CONFIG_NONE.toString(locale)</pre></td></tr>
<tr> <td class="numLine"> 167</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Translation.STATS_CONFIG_NONE.toString(locale) :</pre></td></tr>
+ <td class="src"><pre class="src"> : canonicalConfigFile.toString();</pre></td></tr>
<tr> <td class="numLine"> 168</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> canonicalConfigFile.toString();</pre></td></tr>
-<tr> <td class="numLine"> 169</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 169</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.SystemTimeProvider.html b/coverage/com.google.enterprise.adaptor.SystemTimeProvider.html
index 2ce20ab..4eb305e 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"> 115</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"> 179930</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"> 173654</td> <td class="src"><pre class="src"> <span class="keyword">return</span> System.currentTimeMillis();</pre></td></tr>
<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.UnsupportedPlatformException.html b/coverage/com.google.enterprise.adaptor.UnsupportedPlatformException.html
index 23b4077..c1b608b 100644
--- a/coverage/com.google.enterprise.adaptor.UnsupportedPlatformException.html
+++ b/coverage/com.google.enterprise.adaptor.UnsupportedPlatformException.html
@@ -65,9 +65,9 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> UnsupportedPlatformException() {</pre></td></tr>
-<tr> <td class="numLineCover"> 25</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>(System.getProperty(<span class="string">"os.name"</span>) +</span></pre></td></tr>
+<tr> <td class="numLineCover"> 25</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>(System.getProperty(<span class="string">"os.name"</span>)</span></pre></td></tr>
<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">" is not a supported platform for this adaptor."</span>);</pre></td></tr>
+ <td class="src"><pre class="src"> + <span class="string">" is not a supported platform for this adaptor."</span>);</pre></td></tr>
<tr> <td class="numLineCover"> 27</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
diff --git a/coverage/com.google.enterprise.adaptor.UserPrincipal.html b/coverage/com.google.enterprise.adaptor.UserPrincipal.html
index e1a9ca3..0a41c83 100644
--- a/coverage/com.google.enterprise.adaptor.UserPrincipal.html
+++ b/coverage/com.google.enterprise.adaptor.UserPrincipal.html
@@ -75,7 +75,7 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> isUser() {</pre></td></tr>
-<tr> <td class="numLineCover"> 32</td> <td class="nbHitsCovered"> 1164</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 32</td> <td class="nbHitsCovered"> 1175</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.examples.GroupDefinitionsScaleTester.html b/coverage/com.google.enterprise.adaptor.examples.GroupDefinitionsScaleTester.html
index 10c976d..34622f1 100644
--- a/coverage/com.google.enterprise.adaptor.examples.GroupDefinitionsScaleTester.html
+++ b/coverage/com.google.enterprise.adaptor.examples.GroupDefinitionsScaleTester.html
@@ -72,142 +72,140 @@
<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.IOException;</pre></td></tr>
<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.logging.Level;</pre></td></tr>
-<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.logging.Logger;</pre></td></tr>
-<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.ArrayList;</pre></td></tr>
-<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Collections;</pre></td></tr>
-<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.List;</pre></td></tr>
-<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Map;</pre></td></tr>
-<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Random;</pre></td></tr>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.logging.Level;</pre></td></tr>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.logging.Logger;</pre></td></tr>
<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.TreeMap;</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/** Creates groups and users and pushes some number of principals per group. */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 38</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">public</span> <span class="keyword">class</span> GroupDefinitionsScaleTester <span class="keyword">extends</span> AbstractAdaptor {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 39</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Logger log</span></pre></td></tr>
-<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 37</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">public</span> <span class="keyword">class</span> GroupDefinitionsScaleTester <span class="keyword">extends</span> AbstractAdaptor {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 38</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Logger log</span></pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = Logger.getLogger(GroupDefinitionsScaleTester.<span class="keyword">class</span>.getName());</pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">int</span> nusers;</pre></td></tr>
-<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">int</span> ngroups;</pre></td></tr>
-<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">int</span> nuserspergroup;</pre></td></tr>
-<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">int</span> ngroupspergroup;</pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> String namespace;</pre></td></tr>
-<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> String domain;</pre></td></tr>
-<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 50</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> Random rander = <span class="keyword">new</span> Random();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 49</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> Random rander = <span class="keyword">new</span> Random();</span></pre></td></tr>
+<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> initConfig(Config config) {</pre></td></tr>
-<tr> <td class="numLineCover"> 54</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.addKey(<span class="string">"test.numusers"</span>, <span class="keyword">null</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 55</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.addKey(<span class="string">"test.numgroups"</span>, <span class="keyword">null</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 56</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.addKey(<span class="string">"test.userspergroup"</span>, <span class="keyword">null</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 57</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.addKey(<span class="string">"test.groupspergroup"</span>, <span class="keyword">null</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 58</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.addKey(<span class="string">"test.namespace"</span>, <span class="string">"duper-draper-scarlet-and-bond"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 59</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.addKey(<span class="string">"test.domain"</span>, <span class="string">"duperduperdomain.net"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 60</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 53</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.addKey(<span class="string">"test.numusers"</span>, <span class="keyword">null</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 54</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.addKey(<span class="string">"test.numgroups"</span>, <span class="keyword">null</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 55</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.addKey(<span class="string">"test.userspergroup"</span>, <span class="keyword">null</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.addKey(<span class="string">"test.groupspergroup"</span>, <span class="keyword">null</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 57</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.addKey(<span class="string">"test.namespace"</span>, <span class="string">"duper-draper-scarlet-and-bond"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 58</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.addKey(<span class="string">"test.domain"</span>, <span class="string">"duperduperdomain.net"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 59</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">int</span> toInt(String s) {</pre></td></tr>
-<tr> <td class="numLineCover"> 63</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> Integer.parseInt(s);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 62</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> Integer.parseInt(s);</span></pre></td></tr>
+<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 64</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"> 65</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> init(AdaptorContext context) <span class="keyword">throws</span> Exception {</pre></td></tr>
-<tr> <td class="numLineCover"> 68</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> nusers = toInt(context.getConfig().getValue(<span class="string">"test.numusers"</span>));</span></pre></td></tr>
-<tr> <td class="numLineCover"> 69</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ngroups = toInt(context.getConfig().getValue(<span class="string">"test.numgroups"</span>));</span></pre></td></tr>
-<tr> <td class="numLineCover"> 70</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> nuserspergroup = toInt(context.getConfig().getValue(<span class="string">"test.userspergroup"</span>));</span></pre></td></tr>
-<tr> <td class="numLineCover"> 71</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ngroupspergroup = toInt(context.getConfig().getValue(<span class="string">"test.groupspergroup"</span>));</span></pre></td></tr>
-<tr> <td class="numLineCover"> 72</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> namespace = context.getConfig().getValue(<span class="string">"test.namespace"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 73</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> domain = context.getConfig().getValue(<span class="string">"test.domain"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 74</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 67</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> nusers = toInt(context.getConfig().getValue(<span class="string">"test.numusers"</span>));</span></pre></td></tr>
+<tr> <td class="numLineCover"> 68</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ngroups = toInt(context.getConfig().getValue(<span class="string">"test.numgroups"</span>));</span></pre></td></tr>
+<tr> <td class="numLineCover"> 69</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> nuserspergroup = toInt(context.getConfig().getValue(<span class="string">"test.userspergroup"</span>));</span></pre></td></tr>
+<tr> <td class="numLineCover"> 70</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ngroupspergroup = toInt(context.getConfig().getValue(<span class="string">"test.groupspergroup"</span>));</span></pre></td></tr>
+<tr> <td class="numLineCover"> 71</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> namespace = context.getConfig().getValue(<span class="string">"test.namespace"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 72</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> domain = context.getConfig().getValue(<span class="string">"test.domain"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 73</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> UserPrincipal makeUser(<span class="keyword">int</span> i) {</pre></td></tr>
-<tr> <td class="numLineCover"> 77</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">new</span> UserPrincipal(<span class="string">"user"</span> + i + <span class="string">"@"</span> + domain, namespace);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 76</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">new</span> UserPrincipal(<span class="string">"user"</span> + i + <span class="string">"@"</span> + domain, namespace);</span></pre></td></tr>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> GroupPrincipal makeGroup(<span class="keyword">int</span> i) {</pre></td></tr>
-<tr> <td class="numLineCover"> 81</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">new</span> GroupPrincipal(<span class="string">"group"</span> + i + <span class="string">"@"</span> + domain, namespace);</span></pre></td></tr>
-<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 80</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">new</span> GroupPrincipal(<span class="string">"group"</span> + i + <span class="string">"@"</span> + domain, namespace);</span></pre></td></tr>
+<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> getDocIds(DocIdPusher pusher) <span class="keyword">throws</span> InterruptedException,</pre></td></tr>
-<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 87</td> <td class="nbHitsUncovered"><a title="Line 87: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 87: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < ngroups; i++) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 88</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> List<Principal> members = <span class="keyword">new</span> ArrayList<Principal>();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 89</td> <td class="nbHitsUncovered"><a title="Line 89: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 89: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> j = 0; j < ngroupspergroup; j++) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 90</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> chosen = rander.nextInt(ngroups);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 91</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> members.add(makeGroup(chosen));</span></pre></td></tr>
-<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 86</td> <td class="nbHitsUncovered"><a title="Line 86: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 86: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < ngroups; i++) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 87</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> List<Principal> members = <span class="keyword">new</span> ArrayList<Principal>();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 88</td> <td class="nbHitsUncovered"><a title="Line 88: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 88: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> j = 0; j < ngroupspergroup; j++) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 89</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> chosen = rander.nextInt(ngroups);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 90</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> members.add(makeGroup(chosen));</span></pre></td></tr>
+<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 93</td> <td class="nbHitsUncovered"><a title="Line 93: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 93: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> j = 0; j < nuserspergroup; j++) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 94</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> chosen = rander.nextInt(nusers);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 95</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> members.add(makeUser(chosen));</span></pre></td></tr>
-<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 92</td> <td class="nbHitsUncovered"><a title="Line 92: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 92: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> j = 0; j < nuserspergroup; j++) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 93</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> chosen = rander.nextInt(nusers);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 94</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> members.add(makeUser(chosen));</span></pre></td></tr>
+<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 97</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> GroupPrincipal group = makeGroup(i);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 98</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<GroupPrincipal, List<Principal>> groupdef</span></pre></td></tr>
-<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 96</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> GroupPrincipal group = makeGroup(i);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 97</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<GroupPrincipal, List<Principal>> groupdef</span></pre></td></tr>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = Collections.singletonMap(group, members);</pre></td></tr>
-<tr> <td class="numLineCover"> 100</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">final</span> <span class="keyword">boolean</span> caseSensitive = <span class="keyword">false</span>;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 101</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> pusher.pushGroupDefinitions(groupdef, caseSensitive);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 102</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.INFO, <span class="string">"pushed group {0} with {1} members"</span>, <span class="keyword">new</span> Object[] {</span></pre></td></tr>
-<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 99</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">final</span> <span class="keyword">boolean</span> caseSensitive = <span class="keyword">false</span>;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 100</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> pusher.pushGroupDefinitions(groupdef, caseSensitive);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 101</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.INFO, <span class="string">"pushed group {0} with {1} members"</span>, <span class="keyword">new</span> Object[] {</span></pre></td></tr>
+<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> group, members.size()});</pre></td></tr>
-<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } </pre></td></tr>
-<tr> <td class="numLineCover"> 105</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 104</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> getDocContent(Request req, Response res) <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 109</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> res.respondNotFound();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 110</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 108</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> res.respondNotFound();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 109</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String args[]) {</pre></td></tr>
-<tr> <td class="numLineCover"> 113</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> AbstractAdaptor.main(<span class="keyword">new</span> GroupDefinitionsScaleTester(), args);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 114</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 112</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> AbstractAdaptor.main(<span class="keyword">new</span> GroupDefinitionsScaleTester(), args);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 113</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.experimental.Sim.html b/coverage/com.google.enterprise.adaptor.experimental.Sim.html
index 1f6eac8..09e2361 100644
--- a/coverage/com.google.enterprise.adaptor.experimental.Sim.html
+++ b/coverage/com.google.enterprise.adaptor.experimental.Sim.html
@@ -81,577 +81,575 @@
<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> org.w3c.dom.Element;</pre></td></tr>
<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> org.w3c.dom.Node;</pre></td></tr>
-<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> org.w3c.dom.NodeList;</pre></td></tr>
-<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> org.xml.sax.SAXException;</pre></td></tr>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.ByteArrayInputStream;</pre></td></tr>
-<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.ByteArrayOutputStream;</pre></td></tr>
-<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.IOException;</pre></td></tr>
-<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.InputStream;</pre></td></tr>
-<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.OutputStream;</pre></td></tr>
-<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.UnsupportedEncodingException;</pre></td></tr>
-<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.net.HttpURLConnection;</pre></td></tr>
-<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.net.InetSocketAddress;</pre></td></tr>
-<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.net.MalformedURLException;</pre></td></tr>
-<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.net.URI;</pre></td></tr>
-<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.net.URL;</pre></td></tr>
-<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.net.URLConnection;</pre></td></tr>
-<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.nio.charset.Charset;</pre></td></tr>
-<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.HashMap;</pre></td></tr>
-<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.HashSet;</pre></td></tr>
-<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.List;</pre></td></tr>
-<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Map;</pre></td></tr>
-<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Set;</pre></td></tr>
-<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.logging.Logger;</pre></td></tr>
-<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.zip.GZIPInputStream;</pre></td></tr>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> javax.xml.parsers.DocumentBuilder;</pre></td></tr>
-<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> javax.xml.parsers.DocumentBuilderFactory;</pre></td></tr>
-<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> javax.xml.parsers.ParserConfigurationException;</pre></td></tr>
+<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/** Accepts adaptor feeds and issues requests for documents. */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 59</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">public</span> <span class="keyword">class</span> Sim <span class="keyword">implements</span> Runnable {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 60</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> <span class="keyword">static</span> Logger log</span></pre></td></tr>
-<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 58</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">public</span> <span class="keyword">class</span> Sim <span class="keyword">implements</span> Runnable {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 59</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> <span class="keyword">static</span> Logger log</span></pre></td></tr>
+<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = Logger.getLogger(Sim.<span class="keyword">class</span>.getName());</pre></td></tr>
-<tr> <td class="numLineCover"> 62</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">static</span> <span class="keyword">final</span> Charset UTF8 = Charset.forName(<span class="string">"UTF-8"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 61</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">static</span> <span class="keyword">final</span> Charset UTF8 = Charset.forName(<span class="string">"UTF-8"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 64</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> Index {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 65</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Set<URL> urls = <span class="keyword">new</span> HashSet<URL>();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 66</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<URL, <span class="keyword">byte</span>[]> content = <span class="keyword">new</span> HashMap<URL, <span class="keyword">byte</span>[]>();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 67</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<URL, String> type = <span class="keyword">new</span> HashMap<URL, String>(); <span class="comment">// could be null</span></span></pre></td></tr>
-<tr> <td class="numLineCover"> 68</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<URL, Map<String, String>> meta</span></pre></td></tr>
-<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 63</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> Index {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 64</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Set<URL> urls = <span class="keyword">new</span> HashSet<URL>();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 65</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<URL, <span class="keyword">byte</span>[]> content = <span class="keyword">new</span> HashMap<URL, <span class="keyword">byte</span>[]>();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 66</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<URL, String> type = <span class="keyword">new</span> HashMap<URL, String>(); <span class="comment">// could be null</span></span></pre></td></tr>
+<tr> <td class="numLineCover"> 67</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<URL, Map<String, String>> meta</span></pre></td></tr>
+<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = <span class="keyword">new</span> HashMap<URL, Map<String, String>>();</pre></td></tr>
-<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 72</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> Index index = <span class="keyword">new</span> Index(); <span class="comment">// contains contents and metadata</span></span></pre></td></tr>
+<tr> <td class="numLineCover"> 71</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> Index index = <span class="keyword">new</span> Index(); <span class="comment">// contains contents and metadata</span></span></pre></td></tr>
+<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 73</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> startFeedAcceptor() <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 75</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"starting feed acceptor"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 76</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HttpServer server = HttpServer.create();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 77</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> useDefaultBacklog = -1;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 78</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> server.bind(<span class="keyword">new</span> InetSocketAddress(19900), useDefaultBacklog);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 79</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> server.createContext(<span class="string">"/xmlfeed"</span>, <span class="keyword">new</span> FeedAcceptor());</span></pre></td></tr>
-<tr> <td class="numLineCover"> 80</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> server.start();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 81</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"started feed acceptor"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 82</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 74</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"starting feed acceptor"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 75</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HttpServer server = HttpServer.create();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 76</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> useDefaultBacklog = -1;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 77</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> server.bind(<span class="keyword">new</span> InetSocketAddress(19900), useDefaultBacklog);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 78</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> server.createContext(<span class="string">"/xmlfeed"</span>, <span class="keyword">new</span> FeedAcceptor());</span></pre></td></tr>
+<tr> <td class="numLineCover"> 79</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> server.start();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 80</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"started feed acceptor"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 81</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> startCrawler() {</pre></td></tr>
-<tr> <td class="numLineCover"> 85</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"starting crawler"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 86</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">new</span> Thread(<span class="keyword">new</span> Crawler()).start();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 87</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"started crawler"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 88</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 84</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"starting crawler"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 85</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">new</span> Thread(<span class="keyword">new</span> Crawler()).start();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 86</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"started crawler"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 87</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
-<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 92</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> startFeedAcceptor();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 93</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ie) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 94</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"failed to start feed acceptor"</span>, ie);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 95</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 96</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> startCrawler();</span></pre></td></tr>
-<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 91</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> startFeedAcceptor();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 92</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ie) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 93</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"failed to start feed acceptor"</span>, ie);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 94</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 95</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> startCrawler();</span></pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// TODO: add serving</span></pre></td></tr>
-<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// TODO: add stops to exit</span></pre></td></tr>
-<tr> <td class="numLineCover"> 99</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 98</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> main(String args[]) {</pre></td></tr>
-<tr> <td class="numLineCover"> 102</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">new</span> Sim().run(); </span></pre></td></tr>
-<tr> <td class="numLineCover"> 103</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 101</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">new</span> Sim().run(); </span></pre></td></tr>
+<tr> <td class="numLineCover"> 102</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/** Takes multipart POST with metadata-and-url xml feed. */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 108</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> <span class="keyword">class</span> FeedAcceptor <span class="keyword">implements</span> HttpHandler {</span></pre></td></tr>
-<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 107</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> <span class="keyword">class</span> FeedAcceptor <span class="keyword">implements</span> HttpHandler {</span></pre></td></tr>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> handle(HttpExchange ex) <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 111</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"in feed acceptor"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 112</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String requestMethod = ex.getRequestMethod();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 113</td> <td class="nbHitsUncovered"><a title="Line 113: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 113: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!<span class="string">"POST"</span>.equals(requestMethod)) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 114</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"received non-post method: "</span> + requestMethod);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 115</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> respond(ex, HttpURLConnection.HTTP_BAD_METHOD,</span></pre></td></tr>
-<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 110</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"in feed acceptor"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 111</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String requestMethod = ex.getRequestMethod();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 112</td> <td class="nbHitsUncovered"><a title="Line 112: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 112: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!<span class="string">"POST"</span>.equals(requestMethod)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 113</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"received non-post method: "</span> + requestMethod);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 114</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> respond(ex, HttpURLConnection.HTTP_BAD_METHOD,</span></pre></td></tr>
+<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="string">"text/plain"</span>, <span class="string">"server accepts POST only"</span>.getBytes(UTF8));</pre></td></tr>
-<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 118</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> URI req = com.google.enterprise.adaptor.HttpExchanges.getRequestUri(ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 119</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"received post on path: "</span> + req.getPath());</span></pre></td></tr>
-<tr> <td class="numLineCover"> 120</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> processMultipartPost(ex); </span></pre></td></tr>
-<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 117</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> URI req = com.google.enterprise.adaptor.HttpExchanges.getRequestUri(ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 118</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"received post on path: "</span> + req.getPath());</span></pre></td></tr>
+<tr> <td class="numLineCover"> 119</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> processMultipartPost(ex); </span></pre></td></tr>
+<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 122</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 121</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 125</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> NoXmlFound <span class="keyword">extends</span> Exception {}</span></pre></td></tr>
-<tr> <td class="numLine"> 126</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 124</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> NoXmlFound <span class="keyword">extends</span> Exception {}</span></pre></td></tr>
+<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> BadFeed <span class="keyword">extends</span> Exception {</pre></td></tr>
-<tr> <td class="numLine"> 127</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 126</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> BadFeed(String emsg) {</pre></td></tr>
-<tr> <td class="numLineCover"> 128</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">super</span>(emsg);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 129</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 127</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">super</span>(emsg);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 128</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 132</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/** Periodically acquires new content and metadata for each URL. */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 133</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> <span class="keyword">class</span> Crawler <span class="keyword">implements</span> Runnable {</span></pre></td></tr>
-<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 132</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> <span class="keyword">class</span> Crawler <span class="keyword">implements</span> Runnable {</span></pre></td></tr>
+<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> Set<URL> dupIndexUrls() {</pre></td></tr>
-<tr> <td class="numLineCover"> 135</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">synchronized</span> (index.urls) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 136</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">new</span> HashSet<URL>(index.urls); </span></pre></td></tr>
-<tr> <td class="numLineCover"> 137</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 134</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">synchronized</span> (index.urls) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 135</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">new</span> HashSet<URL>(index.urls); </span></pre></td></tr>
+<tr> <td class="numLineCover"> 136</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 138</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"> 139</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
-<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">for</span> (;;) {</pre></td></tr>
-<tr> <td class="numLineCover"> 142</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"crawler about to hibernate"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 141</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"crawler about to hibernate"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 142</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 144</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Thread.sleep(1000 * 20);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 145</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException terup) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 146</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"crawler awoken early"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 147</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 148</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"crawler is awake"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 149</td> <td class="nbHitsUncovered"><a title="Line 149: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 149: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (URL doc : dupIndexUrls()) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 150</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> crawl(doc);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 143</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Thread.sleep(1000 * 20);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 144</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException terup) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 145</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"crawler awoken early"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 146</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 147</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"crawler is awake"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 148</td> <td class="nbHitsUncovered"><a title="Line 148: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 148: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (URL doc : dupIndexUrls()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 149</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> crawl(doc);</span></pre></td></tr>
+<tr> <td class="numLine"> 150</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 151</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"> 152</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"> 153</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"> 154</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 155</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> crawl(URL doc) {</pre></td></tr>
-<tr> <td class="numLineCover"> 156</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"about to crawl: "</span> + doc);</span></pre></td></tr>
-<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 155</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"about to crawl: "</span> + doc);</span></pre></td></tr>
+<tr> <td class="numLine"> 156</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 158</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> URLConnection con = doc.openConnection();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 159</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">byte</span> content[]</span></pre></td></tr>
-<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 157</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> URLConnection con = doc.openConnection();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 158</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">byte</span> content[]</span></pre></td></tr>
+<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = IOHelper.readInputStreamToByteArray(con.getInputStream());</pre></td></tr>
-<tr> <td class="numLineCover"> 161</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> index.content.put(doc, content);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 162</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<String, List<String>> headers = con.getHeaderFields();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 163</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> List<String> ct = headers.get(<span class="string">"Content-type"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 164</td> <td class="nbHitsUncovered"><a title="Line 164: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 164: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> index.type.put(doc, (<span class="keyword">null</span> != ct && ct.size() > 0) ? ct.get(0) : <span class="keyword">null</span>);</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 165</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> index.meta.put(doc, parseMeta(headers.get(<span class="string">"X-gsa-external-metadata"</span>)));</span></pre></td></tr>
-<tr> <td class="numLineCover"> 166</td> <td class="nbHitsUncovered"><a title="Line 166: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 166: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (String k : headers.keySet()) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 167</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"header: "</span> + k + <span class="string">":"</span> + headers.get(k));</span></pre></td></tr>
-<tr> <td class="numLine"> 168</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 160</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> index.content.put(doc, content);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 161</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<String, List<String>> headers = con.getHeaderFields();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 162</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> List<String> ct = headers.get(<span class="string">"Content-type"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 163</td> <td class="nbHitsUncovered"><a title="Line 163: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 163: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> index.type.put(doc, (<span class="keyword">null</span> != ct && ct.size() > 0) ? ct.get(0) : <span class="keyword">null</span>);</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 164</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> index.meta.put(doc, parseMeta(headers.get(<span class="string">"X-gsa-external-metadata"</span>)));</span></pre></td></tr>
+<tr> <td class="numLineCover"> 165</td> <td class="nbHitsUncovered"><a title="Line 165: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 165: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (String k : headers.keySet()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 166</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"header: "</span> + k + <span class="string">":"</span> + headers.get(k));</span></pre></td></tr>
+<tr> <td class="numLine"> 167</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 169</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"crawled: "</span> + doc);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 170</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ie) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 171</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"failed getting: "</span> + doc);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 172</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 173</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 168</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"crawled: "</span> + doc);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 169</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ie) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 170</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"failed getting: "</span> + doc);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 171</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 172</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 173</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 174</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> Map<String, String> parseMeta(List<String> metadata) {</pre></td></tr>
-<tr> <td class="numLineCover"> 176</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<String, String> map = <span class="keyword">new</span> HashMap<String, String>();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 177</td> <td class="nbHitsUncovered"><a title="Line 177: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 177: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> != metadata) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 178</td> <td class="nbHitsUncovered"><a title="Line 178: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 178: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (String m : metadata) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 179</td> <td class="nbHitsUncovered"><a title="Line 179: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 179: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> != m) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 180</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> parseMeta(map, m);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 175</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<String, String> map = <span class="keyword">new</span> HashMap<String, String>();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 176</td> <td class="nbHitsUncovered"><a title="Line 176: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 176: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> != metadata) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 177</td> <td class="nbHitsUncovered"><a title="Line 177: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 177: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (String m : metadata) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 178</td> <td class="nbHitsUncovered"><a title="Line 178: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 178: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> != m) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 179</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> parseMeta(map, m);</span></pre></td></tr>
+<tr> <td class="numLine"> 180</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 181</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 182</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } </pre></td></tr>
-<tr> <td class="numLine"> 183</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 182</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 184</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> map;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 183</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> map;</span></pre></td></tr>
+<tr> <td class="numLine"> 184</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 185</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"> 186</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 187</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> parseMeta(Map<String, String> map, String metadatum) {</pre></td></tr>
-<tr> <td class="numLineCover"> 188</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String metadatums[] = metadatum.split(<span class="string">","</span>, 0);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 189</td> <td class="nbHitsUncovered"><a title="Line 189: Conditional coverage 0% (0/3)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 189: Conditional coverage 0% (0/3)."> <span class="keyword">switch</span> (metadatums.length) {</a></span></pre></td></tr>
-<tr> <td class="numLine"> 190</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 187</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String metadatums[] = metadatum.split(<span class="string">","</span>, 0);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 188</td> <td class="nbHitsUncovered"><a title="Line 188: Conditional coverage 0% (0/3)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 188: Conditional coverage 0% (0/3)."> <span class="keyword">switch</span> (metadatums.length) {</a></span></pre></td></tr>
+<tr> <td class="numLine"> 189</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">case</span> 0:</pre></td></tr>
-<tr> <td class="numLineCover"> 191</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"> 192</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 190</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"> 191</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">case</span> 1: <span class="comment">// really have single metadatum</span></pre></td></tr>
-<tr> <td class="numLineCover"> 193</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String m = metadatums[0];</span></pre></td></tr>
-<tr> <td class="numLineCover"> 194</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> splitPoint = m.indexOf(<span class="string">'='</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 195</td> <td class="nbHitsUncovered"><a title="Line 195: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 195: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (-1 == splitPoint) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 196</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"skipping metadatum: "</span> + m);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 197</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span>;</span></pre></td></tr>
-<tr> <td class="numLine"> 198</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 192</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String m = metadatums[0];</span></pre></td></tr>
+<tr> <td class="numLineCover"> 193</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> splitPoint = m.indexOf(<span class="string">'='</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 194</td> <td class="nbHitsUncovered"><a title="Line 194: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 194: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (-1 == splitPoint) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 195</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"skipping metadatum: "</span> + m);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 196</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 197</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 199</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String key = m.substring(0, splitPoint);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 200</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String value = m.substring(splitPoint + 1);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 201</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> key = percentDecode(key);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 202</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> value = percentDecode(value);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 203</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"key: "</span> + key);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 204</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"value: "</span> + value);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 205</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> map.put(key, value);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 206</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"> 207</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 198</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String key = m.substring(0, splitPoint);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 199</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String value = m.substring(splitPoint + 1);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 200</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> key = percentDecode(key);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 201</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> value = percentDecode(value);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 202</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"key: "</span> + key);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 203</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"value: "</span> + value);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 204</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> map.put(key, value);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 205</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"> 206</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">default</span>: <span class="comment">// have multiple pieces split by comma</span></pre></td></tr>
-<tr> <td class="numLineCover"> 208</td> <td class="nbHitsUncovered"><a title="Line 208: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 208: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (String p : metadatums) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 209</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> parseMeta(map, p);</span></pre></td></tr>
-<tr> <td class="numLine"> 210</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 207</td> <td class="nbHitsUncovered"><a title="Line 207: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 207: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (String p : metadatums) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 208</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> parseMeta(map, p);</span></pre></td></tr>
+<tr> <td class="numLine"> 209</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 211</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 210</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 212</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 211</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 212</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 214</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 215</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> processMultipartPost(HttpExchange ex) <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 216</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> InputStream inStream = ex.getRequestBody();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 217</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String encoding = ex.getRequestHeaders().getFirst(<span class="string">"Content-encoding"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 218</td> <td class="nbHitsUncovered"><a title="Line 218: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 218: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">if</span> (<span class="keyword">null</span> != encoding && <span class="string">"gzip"</span>.equals(encoding.toLowerCase())) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 219</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> inStream = <span class="keyword">new</span> GZIPInputStream(inStream);</span></pre></td></tr>
-<tr> <td class="numLine"> 220</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 215</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> InputStream inStream = ex.getRequestBody();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 216</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String encoding = ex.getRequestHeaders().getFirst(<span class="string">"Content-encoding"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 217</td> <td class="nbHitsUncovered"><a title="Line 217: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 217: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">if</span> (<span class="keyword">null</span> != encoding && <span class="string">"gzip"</span>.equals(encoding.toLowerCase())) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 218</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> inStream = <span class="keyword">new</span> GZIPInputStream(inStream);</span></pre></td></tr>
+<tr> <td class="numLine"> 219</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 221</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String lens = ex.getRequestHeaders().getFirst(<span class="string">"Content-Length"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 222</td> <td class="nbHitsUncovered"><a title="Line 222: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 222: Conditional coverage 0% (0/2)."> <span class="keyword">int</span> len = (<span class="keyword">null</span> != lens) ? Integer.parseInt(lens) : 0;</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 223</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String ct = ex.getRequestHeaders().getFirst(<span class="string">"Content-Type"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 224</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 220</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String lens = ex.getRequestHeaders().getFirst(<span class="string">"Content-Length"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 221</td> <td class="nbHitsUncovered"><a title="Line 221: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 221: Conditional coverage 0% (0/2)."> <span class="keyword">int</span> len = (<span class="keyword">null</span> != lens) ? Integer.parseInt(lens) : 0;</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 222</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String ct = ex.getRequestHeaders().getFirst(<span class="string">"Content-Type"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 223</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 225</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String xml = extractFeedFromMultipartPost(inStream, len, ct);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 226</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> processXml(xml);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 227</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> respond(ex, HttpURLConnection.HTTP_OK,</span></pre></td></tr>
-<tr> <td class="numLine"> 228</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 224</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String xml = extractFeedFromMultipartPost(inStream, len, ct);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 225</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> processXml(xml);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 226</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> respond(ex, HttpURLConnection.HTTP_OK,</span></pre></td></tr>
+<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="string">"text/plain"</span>, <span class="string">"Success"</span>.getBytes(UTF8));</pre></td></tr>
-<tr> <td class="numLineCover"> 229</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (NoXmlFound nox) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 230</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"failed to find xml"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 231</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> respond(ex, HttpURLConnection.HTTP_BAD_REQUEST,</span></pre></td></tr>
-<tr> <td class="numLine"> 232</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 228</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (NoXmlFound nox) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 229</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"failed to find xml"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 230</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> respond(ex, HttpURLConnection.HTTP_BAD_REQUEST,</span></pre></td></tr>
+<tr> <td class="numLine"> 231</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="string">"text/plain"</span>, <span class="string">"xml beginning not found"</span>.getBytes(UTF8));</pre></td></tr>
-<tr> <td class="numLineCover"> 233</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (SAXException saxe) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 234</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"sax error: "</span> + saxe.getMessage());</span></pre></td></tr>
-<tr> <td class="numLineCover"> 235</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> respond(ex, HttpURLConnection.HTTP_BAD_REQUEST,</span></pre></td></tr>
-<tr> <td class="numLine"> 236</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 232</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (SAXException saxe) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 233</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"sax error: "</span> + saxe.getMessage());</span></pre></td></tr>
+<tr> <td class="numLineCover"> 234</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> respond(ex, HttpURLConnection.HTTP_BAD_REQUEST,</span></pre></td></tr>
+<tr> <td class="numLine"> 235</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="string">"text/plain"</span>, <span class="string">"sax not liking the xml"</span>.getBytes(UTF8));</pre></td></tr>
-<tr> <td class="numLineCover"> 237</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (ParserConfigurationException confige) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 238</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"parser error: "</span> + confige.getMessage());</span></pre></td></tr>
-<tr> <td class="numLineCover"> 239</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> respond(ex, HttpURLConnection.HTTP_BAD_REQUEST,</span></pre></td></tr>
-<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 236</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (ParserConfigurationException confige) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 237</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"parser error: "</span> + confige.getMessage());</span></pre></td></tr>
+<tr> <td class="numLineCover"> 238</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> respond(ex, HttpURLConnection.HTTP_BAD_REQUEST,</span></pre></td></tr>
+<tr> <td class="numLine"> 239</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="string">"text/plain"</span>, <span class="string">"parser error"</span>.getBytes(UTF8));</pre></td></tr>
-<tr> <td class="numLineCover"> 241</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (BadFeed bad) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 242</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"error in feed: "</span> + bad.getMessage());</span></pre></td></tr>
-<tr> <td class="numLineCover"> 243</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> respond(ex, HttpURLConnection.HTTP_BAD_REQUEST,</span></pre></td></tr>
-<tr> <td class="numLine"> 244</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 240</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (BadFeed bad) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 241</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"error in feed: "</span> + bad.getMessage());</span></pre></td></tr>
+<tr> <td class="numLineCover"> 242</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> respond(ex, HttpURLConnection.HTTP_BAD_REQUEST,</span></pre></td></tr>
+<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="string">"text/plain"</span>, bad.getMessage().getBytes(UTF8));</pre></td></tr>
-<tr> <td class="numLineCover"> 245</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 246</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 244</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 245</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 246</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 247</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 248</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> processXml(String xml) <span class="keyword">throws</span> SAXException,</pre></td></tr>
-<tr> <td class="numLine"> 249</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 248</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> ParserConfigurationException, BadFeed {</pre></td></tr>
-<tr> <td class="numLineCover"> 250</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Set<URL> tmpUrls = extractUrls(xml);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 251</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">synchronized</span> (index.urls) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 252</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> index.urls.addAll(tmpUrls);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 253</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 254</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 249</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Set<URL> tmpUrls = extractUrls(xml);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 250</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">synchronized</span> (index.urls) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 251</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> index.urls.addAll(tmpUrls);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 252</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 253</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 254</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 255</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 256</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">static</span> String extractFeedFromMultipartPost(</pre></td></tr>
-<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 256</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> InputStream in, <span class="keyword">int</span> len, String contentType) <span class="keyword">throws</span> NoXmlFound {</pre></td></tr>
-<tr> <td class="numLineCover"> 258</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HttpExchangeUploadInfo uploadInfo</span></pre></td></tr>
-<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 257</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HttpExchangeUploadInfo uploadInfo</span></pre></td></tr>
+<tr> <td class="numLine"> 258</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = <span class="keyword">new</span> HttpExchangeUploadInfo(in, len, contentType);</pre></td></tr>
-<tr> <td class="numLine"> 260</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 261</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<String, <span class="keyword">byte</span>[]> parts = splitMultipartRequest(uploadInfo);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 262</td> <td class="nbHitsUncovered"><a title="Line 262: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 262: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!parts.containsKey(<span class="string">"data"</span>)) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 263</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> NoXmlFound();</span></pre></td></tr>
-<tr> <td class="numLine"> 264</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 260</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<String, <span class="keyword">byte</span>[]> parts = splitMultipartRequest(uploadInfo);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 261</td> <td class="nbHitsUncovered"><a title="Line 261: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 261: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!parts.containsKey(<span class="string">"data"</span>)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 262</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> NoXmlFound();</span></pre></td></tr>
+<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 265</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">new</span> String(parts.get(<span class="string">"data"</span>), UTF8);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 266</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ie) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 267</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> NoXmlFound();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 264</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">new</span> String(parts.get(<span class="string">"data"</span>), UTF8);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 265</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ie) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 266</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> NoXmlFound();</span></pre></td></tr>
+<tr> <td class="numLine"> 267</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 268</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 269</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 270</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/** Find all record urls in Adaptor created XML metadata-and-url feed file. */</span></pre></td></tr>
-<tr> <td class="numLine"> 272</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">static</span> Set<URL> extractUrls(String xml) <span class="keyword">throws</span> SAXException,</pre></td></tr>
-<tr> <td class="numLine"> 273</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 272</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> ParserConfigurationException, BadFeed {</pre></td></tr>
-<tr> <td class="numLineCover"> 274</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();</span></pre></td></tr>
-<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 273</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();</span></pre></td></tr>
+<tr> <td class="numLine"> 274</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/* to avoid blowing up on doctype line:</span></pre></td></tr>
-<tr> <td class="numLine"> 276</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * http://stackoverflow.com/questions/155101/make-documentbuilder-parse-ignore-dtd-references */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 277</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> dbf.setValidating(<span class="keyword">false</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 278</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> dbf.setFeature(<span class="string">"http://xml.org/sax/features/namespaces"</span>, <span class="keyword">false</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 279</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> dbf.setFeature(<span class="string">"http://xml.org/sax/features/validation"</span>, <span class="keyword">false</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 280</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> dbf.setFeature(</span></pre></td></tr>
-<tr> <td class="numLine"> 281</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 276</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> dbf.setValidating(<span class="keyword">false</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 277</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> dbf.setFeature(<span class="string">"http://xml.org/sax/features/namespaces"</span>, <span class="keyword">false</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 278</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> dbf.setFeature(<span class="string">"http://xml.org/sax/features/validation"</span>, <span class="keyword">false</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 279</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> dbf.setFeature(</span></pre></td></tr>
+<tr> <td class="numLine"> 280</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="string">"http://apache.org/xml/features/nonvalidating/load-dtd-grammar"</span>, <span class="keyword">false</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 282</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> dbf.setFeature(</span></pre></td></tr>
-<tr> <td class="numLine"> 283</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 281</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> dbf.setFeature(</span></pre></td></tr>
+<tr> <td class="numLine"> 282</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="string">"http://apache.org/xml/features/nonvalidating/load-external-dtd"</span>, <span class="keyword">false</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 284</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> DocumentBuilder db = dbf.newDocumentBuilder();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 285</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> InputStream xmlStream = <span class="keyword">new</span> ByteArrayInputStream(xml.getBytes(UTF8));</span></pre></td></tr>
-<tr> <td class="numLine"> 286</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 283</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> DocumentBuilder db = dbf.newDocumentBuilder();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 284</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> InputStream xmlStream = <span class="keyword">new</span> ByteArrayInputStream(xml.getBytes(UTF8));</span></pre></td></tr>
+<tr> <td class="numLine"> 285</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> Document doc;</pre></td></tr>
-<tr> <td class="numLine"> 287</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 286</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 288</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> doc = db.parse(xmlStream);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 289</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ie) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 290</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> BadFeed(ie.getMessage());</span></pre></td></tr>
-<tr> <td class="numLineCover"> 291</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 292</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> doc.getDocumentElement().normalize();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 293</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> NodeList nodes = doc.getElementsByTagName(<span class="string">"record"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 294</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Set<URL> tmpUrls = <span class="keyword">new</span> HashSet<URL>();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 295</td> <td class="nbHitsUncovered"><a title="Line 295: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 295: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < nodes.getLength(); i++) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 296</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Element element = (Element) nodes.item(i);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 297</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String url = element.getAttribute(<span class="string">"url"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 298</td> <td class="nbHitsUncovered"><a title="Line 298: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 298: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">if</span> (<span class="keyword">null</span> == url || url.trim().isEmpty()) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 299</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> BadFeed(<span class="string">"record without url attribute"</span>); </span></pre></td></tr>
+<tr> <td class="numLineCover"> 287</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> doc = db.parse(xmlStream);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 288</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ie) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 289</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> BadFeed(ie.getMessage());</span></pre></td></tr>
+<tr> <td class="numLineCover"> 290</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 291</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> doc.getDocumentElement().normalize();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 292</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> NodeList nodes = doc.getElementsByTagName(<span class="string">"record"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 293</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Set<URL> tmpUrls = <span class="keyword">new</span> HashSet<URL>();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 294</td> <td class="nbHitsUncovered"><a title="Line 294: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 294: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < nodes.getLength(); i++) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 295</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Element element = (Element) nodes.item(i);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 296</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String url = element.getAttribute(<span class="string">"url"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 297</td> <td class="nbHitsUncovered"><a title="Line 297: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 297: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">if</span> (<span class="keyword">null</span> == url || url.trim().isEmpty()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 298</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> BadFeed(<span class="string">"record without url attribute"</span>); </span></pre></td></tr>
+<tr> <td class="numLine"> 299</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine"> 300</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLine"> 301</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 302</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> tmpUrls.add(<span class="keyword">new</span> URL(url));</span></pre></td></tr>
-<tr> <td class="numLineCover"> 303</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (MalformedURLException male) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 304</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> BadFeed(<span class="string">"record with bad url attribute: "</span> + url);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 305</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 306</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 301</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> tmpUrls.add(<span class="keyword">new</span> URL(url));</span></pre></td></tr>
+<tr> <td class="numLineCover"> 302</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (MalformedURLException male) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 303</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> BadFeed(<span class="string">"record with bad url attribute: "</span> + url);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 304</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 305</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 307</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"accepting url: "</span> + url);</span></pre></td></tr>
-<tr> <td class="numLine"> 308</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 306</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.info(<span class="string">"accepting url: "</span> + url);</span></pre></td></tr>
+<tr> <td class="numLine"> 307</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 309</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> tmpUrls;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 308</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> tmpUrls;</span></pre></td></tr>
+<tr> <td class="numLine"> 309</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 310</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 311</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 312</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/** Send some response body. */</span></pre></td></tr>
-<tr> <td class="numLine"> 313</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 312</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> respond(HttpExchange ex, <span class="keyword">int</span> code, String contentType,</pre></td></tr>
-<tr> <td class="numLine"> 314</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 313</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">byte</span> response[]) <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 315</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ex.getResponseHeaders().set(<span class="string">"Content-Type"</span>, contentType);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 316</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ex.sendResponseHeaders(code, 0);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 317</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> OutputStream responseBody = ex.getResponseBody();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 318</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.finest(<span class="string">"before writing response"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 319</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> responseBody.write(response);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 320</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> responseBody.flush();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 321</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> responseBody.close();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 322</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ex.close();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 323</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.finest(<span class="string">"after closing exchange"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 324</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 314</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ex.getResponseHeaders().set(<span class="string">"Content-Type"</span>, contentType);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 315</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ex.sendResponseHeaders(code, 0);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 316</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> OutputStream responseBody = ex.getResponseBody();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 317</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.finest(<span class="string">"before writing response"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 318</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> responseBody.write(response);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 319</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> responseBody.flush();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 320</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> responseBody.close();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 321</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ex.close();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 322</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.finest(<span class="string">"after closing exchange"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 323</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 324</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 325</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 326</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/** Intermediary from an HttpExchange to FileUpload input. */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 327</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> HttpExchangeUploadInfo <span class="keyword">implements</span> RequestContext {</span></pre></td></tr>
-<tr> <td class="numLine"> 328</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 326</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> HttpExchangeUploadInfo <span class="keyword">implements</span> RequestContext {</span></pre></td></tr>
+<tr> <td class="numLine"> 327</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> InputStream inStream;</pre></td></tr>
-<tr> <td class="numLine"> 329</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 328</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">int</span> length;</pre></td></tr>
-<tr> <td class="numLine"> 330</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 329</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> String contentType;</pre></td></tr>
-<tr> <td class="numLineCover"> 331</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HttpExchangeUploadInfo(InputStream is, <span class="keyword">int</span> len, String ct) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 332</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.inStream = is;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 333</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.length = len;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 334</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.contentType = ct;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 335</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } </span></pre></td></tr>
+<tr> <td class="numLineCover"> 330</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HttpExchangeUploadInfo(InputStream is, <span class="keyword">int</span> len, String ct) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 331</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.inStream = is;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 332</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.length = len;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 333</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.contentType = ct;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 334</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } </span></pre></td></tr>
+<tr> <td class="numLine"> 335</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 336</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 337</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> String getCharacterEncoding() {</pre></td></tr>
-<tr> <td class="numLine"> 338</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 337</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// TODO: get from exchange?</span></pre></td></tr>
-<tr> <td class="numLineCover"> 339</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="string">"UTF-8"</span>;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 338</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="string">"UTF-8"</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 339</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } </pre></td></tr>
<tr> <td class="numLine"> 340</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } </pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 341</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 342</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> String getContentType() {</pre></td></tr>
-<tr> <td class="numLineCover"> 343</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> contentType;</span></pre></td></tr>
-<tr> <td class="numLine"> 344</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 342</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> contentType;</span></pre></td></tr>
+<tr> <td class="numLine"> 343</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } </pre></td></tr>
+<tr> <td class="numLine"> 344</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 345</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 346</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> getContentLength() {</pre></td></tr>
-<tr> <td class="numLineCover"> 347</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> length;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 346</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> length;</span></pre></td></tr>
+<tr> <td class="numLine"> 347</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 348</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"> 349</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 350</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> InputStream getInputStream() <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 351</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> inStream; </span></pre></td></tr>
+<tr> <td class="numLineCover"> 350</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> inStream; </span></pre></td></tr>
+<tr> <td class="numLine"> 351</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 352</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"> 353</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"> 354</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 355</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">static</span> Map<String, <span class="keyword">byte</span>[]> splitMultipartRequest(RequestContext req)</pre></td></tr>
-<tr> <td class="numLine"> 356</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 355</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 357</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<String, <span class="keyword">byte</span>[]> parts = <span class="keyword">new</span> HashMap<String, <span class="keyword">byte</span>[]>();</span></pre></td></tr>
-<tr> <td class="numLine"> 358</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 356</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<String, <span class="keyword">byte</span>[]> parts = <span class="keyword">new</span> HashMap<String, <span class="keyword">byte</span>[]>();</span></pre></td></tr>
+<tr> <td class="numLine"> 357</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 359</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> FileUpload upload = <span class="keyword">new</span> FileUpload();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 360</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> FileItemIterator iterator = upload.getItemIterator(req);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 361</td> <td class="nbHitsUncovered"><a title="Line 361: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 361: Conditional coverage 0% (0/2)."> <span class="keyword">while</span> (iterator.hasNext()) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 362</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> FileItemStream item = iterator.next();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 363</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String field = item.getFieldName(); </span></pre></td></tr>
-<tr> <td class="numLineCover"> 364</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">byte</span> value[] = </span></pre></td></tr>
-<tr> <td class="numLine"> 365</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 358</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> FileUpload upload = <span class="keyword">new</span> FileUpload();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 359</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> FileItemIterator iterator = upload.getItemIterator(req);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 360</td> <td class="nbHitsUncovered"><a title="Line 360: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 360: Conditional coverage 0% (0/2)."> <span class="keyword">while</span> (iterator.hasNext()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 361</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> FileItemStream item = iterator.next();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 362</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String field = item.getFieldName();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 363</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">byte</span> value[] = </span></pre></td></tr>
+<tr> <td class="numLine"> 364</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> IOHelper.readInputStreamToByteArray(item.openStream());</pre></td></tr>
-<tr> <td class="numLineCover"> 366</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> parts.put(field, value);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 367</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 368</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> parts;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 369</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (FileUploadException e) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 370</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"caught FileUploadException"</span>, e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 365</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> parts.put(field, value);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 366</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 367</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> parts;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 368</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (FileUploadException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 369</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">"caught FileUploadException"</span>, e);</span></pre></td></tr>
+<tr> <td class="numLine"> 370</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 371</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"> 372</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"> 373</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 374</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">int</span> hexToInt(<span class="keyword">byte</span> b) {</pre></td></tr>
-<tr> <td class="numLineCover"> 375</td> <td class="nbHitsUncovered"><a title="Line 375: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 375: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">if</span> (b >= <span class="string">'0'</span> && b <= <span class="string">'9'</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 376</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> (<span class="keyword">byte</span>)(b - <span class="string">'0'</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 377</td> <td class="nbHitsUncovered"><a title="Line 377: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 377: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> } <span class="keyword">else</span> <span class="keyword">if</span> (b >= <span class="string">'a'</span> && b <= <span class="string">'f'</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 378</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> (<span class="keyword">byte</span>)(b - <span class="string">'a'</span>) + 10;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 379</td> <td class="nbHitsUncovered"><a title="Line 379: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 379: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> } <span class="keyword">else</span> <span class="keyword">if</span> (b >= <span class="string">'A'</span> && b <= <span class="string">'F'</span>) {</a></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">return</span> (<span class="keyword">byte</span>)(b - <span class="string">'A'</span>) + 10;</span></pre></td></tr>
-<tr> <td class="numLine"> 381</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 374</td> <td class="nbHitsUncovered"><a title="Line 374: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 374: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">if</span> (b >= <span class="string">'0'</span> && b <= <span class="string">'9'</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 375</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> (<span class="keyword">byte</span>) (b - <span class="string">'0'</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 376</td> <td class="nbHitsUncovered"><a title="Line 376: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 376: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> } <span class="keyword">else</span> <span class="keyword">if</span> (b >= <span class="string">'a'</span> && b <= <span class="string">'f'</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 377</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> (<span class="keyword">byte</span>) (b - <span class="string">'a'</span>) + 10;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 378</td> <td class="nbHitsUncovered"><a title="Line 378: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 378: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> } <span class="keyword">else</span> <span class="keyword">if</span> (b >= <span class="string">'A'</span> && b <= <span class="string">'F'</span>) {</a></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">return</span> (<span class="keyword">byte</span>) (b - <span class="string">'A'</span>) + 10;</span></pre></td></tr>
+<tr> <td class="numLine"> 380</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 382</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"invalid hex byte: "</span> + b);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 381</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"invalid hex byte: "</span> + b);</span></pre></td></tr>
+<tr> <td class="numLine"> 382</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 383</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 384</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"> 385</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 386</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> String percentDecode(String encoded) {</pre></td></tr>
-<tr> <td class="numLine"> 387</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 386</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 388</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">byte</span> bytes[] = encoded.getBytes(<span class="string">"ASCII"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 389</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ByteArrayOutputStream decoded = percentDecode(bytes);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 390</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> decoded.toString(<span class="string">"UTF-8"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 391</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (UnsupportedEncodingException uee) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 392</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(uee);</span></pre></td></tr>
-<tr> <td class="numLine"> 393</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 387</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">byte</span> bytes[] = encoded.getBytes(<span class="string">"ASCII"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 388</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ByteArrayOutputStream decoded = percentDecode(bytes);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 389</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> decoded.toString(<span class="string">"UTF-8"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 390</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (UnsupportedEncodingException uee) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 391</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(uee);</span></pre></td></tr>
+<tr> <td class="numLine"> 392</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 393</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 394</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 395</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 396</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 395</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">static</span> ByteArrayOutputStream percentDecode(<span class="keyword">byte</span> encoded[]) {</pre></td></tr>
-<tr> <td class="numLineCover"> 397</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ByteArrayOutputStream out = <span class="keyword">new</span> ByteArrayOutputStream();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 398</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> i = 0;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 399</td> <td class="nbHitsUncovered"><a title="Line 399: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 399: Conditional coverage 0% (0/2)."> <span class="keyword">while</span> (i < encoded.length) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 400</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">byte</span> b = encoded[i];</span></pre></td></tr>
-<tr> <td class="numLineCover"> 401</td> <td class="nbHitsUncovered"><a title="Line 401: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 401: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (b == <span class="string">'%'</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 402</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> iNeeded = i + 2; <span class="comment">// need two more bytes</span></span></pre></td></tr>
-<tr> <td class="numLineCover"> 403</td> <td class="nbHitsUncovered"><a title="Line 403: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 403: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (iNeeded >= encoded.length) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 404</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"ends too early"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 405</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 396</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ByteArrayOutputStream out = <span class="keyword">new</span> ByteArrayOutputStream();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 397</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> i = 0;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 398</td> <td class="nbHitsUncovered"><a title="Line 398: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 398: Conditional coverage 0% (0/2)."> <span class="keyword">while</span> (i < encoded.length) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 399</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">byte</span> b = encoded[i];</span></pre></td></tr>
+<tr> <td class="numLineCover"> 400</td> <td class="nbHitsUncovered"><a title="Line 400: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 400: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (b == <span class="string">'%'</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 401</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> iNeeded = i + 2; <span class="comment">// need two more bytes</span></span></pre></td></tr>
+<tr> <td class="numLineCover"> 402</td> <td class="nbHitsUncovered"><a title="Line 402: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 402: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (iNeeded >= encoded.length) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 403</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"ends too early"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 404</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 406</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> highOrder = hexToInt(encoded[i + 1]);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 407</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> lowOrder = hexToInt(encoded[i + 2]);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 408</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> byteInInt = (highOrder << 4) | lowOrder;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 409</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> b = (<span class="keyword">byte</span>) byteInInt; <span class="comment">// chops top bytes; could make negative</span></span></pre></td></tr>
-<tr> <td class="numLineCover"> 410</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> i += 3;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 411</td> <td class="nbHitsUncovered"><a title="Line 411: Conditional coverage 0% (0/20) [each condition: 0%, 0%, 0%, 0%, 0%, 0%, 0%, 0%, 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 411: Conditional coverage 0% (0/20) [each condition: 0%, 0%, 0%, 0%, 0%, 0%, 0%, 0%, 0%, 0%]."> } <span class="keyword">else</span> <span class="keyword">if</span> ((b >= <span class="string">'a'</span> && b <= <span class="string">'z'</span>)</a></span></pre></td></tr>
-<tr> <td class="numLine"> 412</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 405</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> highOrder = hexToInt(encoded[i + 1]);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 406</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> lowOrder = hexToInt(encoded[i + 2]);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 407</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> byteInInt = (highOrder << 4) | lowOrder;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 408</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> b = (<span class="keyword">byte</span>) byteInInt; <span class="comment">// chops top bytes; could make negative</span></span></pre></td></tr>
+<tr> <td class="numLineCover"> 409</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> i += 3;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 410</td> <td class="nbHitsUncovered"><a title="Line 410: Conditional coverage 0% (0/20) [each condition: 0%, 0%, 0%, 0%, 0%, 0%, 0%, 0%, 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 410: Conditional coverage 0% (0/20) [each condition: 0%, 0%, 0%, 0%, 0%, 0%, 0%, 0%, 0%, 0%]."> } <span class="keyword">else</span> <span class="keyword">if</span> ((b >= <span class="string">'a'</span> && b <= <span class="string">'z'</span>)</a></span></pre></td></tr>
+<tr> <td class="numLine"> 411</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> || (b >= <span class="string">'A'</span> && b <= <span class="string">'Z'</span>)</pre></td></tr>
-<tr> <td class="numLine"> 413</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 412</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> || (b >= <span class="string">'0'</span> && b <= <span class="string">'9'</span>)</pre></td></tr>
-<tr> <td class="numLine"> 414</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 413</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> || b == <span class="string">'-'</span> || b == <span class="string">'_'</span> || b == <span class="string">'.'</span> || b == <span class="string">'~'</span>) {</pre></td></tr>
-<tr> <td class="numLine"> 415</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 414</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// pass through</span></pre></td></tr>
-<tr> <td class="numLineCover"> 416</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> i++;</span></pre></td></tr>
-<tr> <td class="numLine"> 417</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 415</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> i++;</span></pre></td></tr>
+<tr> <td class="numLine"> 416</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 418</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"not percent encoded"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 419</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 417</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"not percent encoded"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 418</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 420</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> out.write(b);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 421</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 422</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> out;</span></pre></td></tr>
-<tr> <td class="numLine"> 423</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 419</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> out.write(b);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 420</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 421</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> out;</span></pre></td></tr>
+<tr> <td class="numLine"> 422</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 424</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 423</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>