Regeneration from plexi a439f2d
diff --git a/coverage/com.google.enterprise.adaptor.AbortImmediatelyFilter.html b/coverage/com.google.enterprise.adaptor.AbortImmediatelyFilter.html
index 1c02a18..defaaa3 100644
--- a/coverage/com.google.enterprise.adaptor.AbortImmediatelyFilter.html
+++ b/coverage/com.google.enterprise.adaptor.AbortImmediatelyFilter.html
@@ -79,14 +79,14 @@
<td class="src"><pre class="src"> <span class="comment">// Checking abortImmediately is part of a hack to immediately reject clients</span></pre></td></tr>
<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// when the work queue grows too long.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 33</td> <td class="nbHitsCovered"><a title="Line 33: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 33: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (HttpExchanges.abortImmediately.get() != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 33</td> <td class="nbHitsCovered"><a title="Line 33: Conditional coverage 100% (2/2)."> 5</a></td> <td class="src"><pre class="src"> <a title="Line 33: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (HttpExchanges.abortImmediately.get() != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 34</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"> 35</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="string">"Aborting request because server is under high load"</span>);</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="numLineCover"> 37</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> chain.doFilter(ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 37</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> chain.doFilter(ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.Acl.html b/coverage/com.google.enterprise.adaptor.Acl.html
index f718f84..f997968 100644
--- a/coverage/com.google.enterprise.adaptor.Acl.html
+++ b/coverage/com.google.enterprise.adaptor.Acl.html
@@ -90,7 +90,7 @@
<td class="src"><pre class="src"> <span class="comment"> * trimmed by the GSA.</span></pre></td></tr>
<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 32</td> <td class="nbHitsCovered"> 911</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> Acl {</pre></td></tr>
+<tr> <td class="numLineCover"> 32</td> <td class="nbHitsCovered"> 912</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> Acl {</pre></td></tr>
<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
@@ -153,23 +153,23 @@
<td class="src"><pre class="src"> Set<UserPrincipal> permitUsers, Set<UserPrincipal> denyUsers,</pre></td></tr>
<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> DocId inheritFrom, String inheritFromFragment,</pre></td></tr>
-<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 148</td> <td class="src"><pre class="src"> InheritanceType inheritType, <span class="keyword">boolean</span> caseSensitive) {</pre></td></tr>
-<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"><a title="Line 67: Conditional coverage 100% (2/2)."> 148</a></td> <td class="src"><pre class="src"> <a title="Line 67: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!caseSensitive) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> InheritanceType inheritType, <span class="keyword">boolean</span> caseSensitive) {</pre></td></tr>
+<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"><a title="Line 67: Conditional coverage 100% (2/2)."> 149</a></td> <td class="src"><pre class="src"> <a title="Line 67: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!caseSensitive) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 68</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> permitGroups = Collections.unmodifiableSet(cmpWrap(permitGroups));</pre></td></tr>
<tr> <td class="numLineCover"> 69</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> denyGroups = Collections.unmodifiableSet(cmpWrap(denyGroups));</pre></td></tr>
<tr> <td class="numLineCover"> 70</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> permitUsers = Collections.unmodifiableSet(cmpWrap(permitUsers));</pre></td></tr>
<tr> <td class="numLineCover"> 71</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> denyUsers = Collections.unmodifiableSet(cmpWrap(denyUsers));</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="numLineCover"> 73</td> <td class="nbHitsCovered"> 148</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.permitGroups = permitGroups;</pre></td></tr>
-<tr> <td class="numLineCover"> 74</td> <td class="nbHitsCovered"> 148</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.denyGroups = denyGroups;</pre></td></tr>
-<tr> <td class="numLineCover"> 75</td> <td class="nbHitsCovered"> 148</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.permitUsers = permitUsers;</pre></td></tr>
-<tr> <td class="numLineCover"> 76</td> <td class="nbHitsCovered"> 148</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.denyUsers = denyUsers;</pre></td></tr>
-<tr> <td class="numLineCover"> 77</td> <td class="nbHitsCovered"> 148</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.inheritFrom = inheritFrom;</pre></td></tr>
-<tr> <td class="numLineCover"> 78</td> <td class="nbHitsCovered"> 148</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.inheritFromFragment = inheritFromFragment;</pre></td></tr>
-<tr> <td class="numLineCover"> 79</td> <td class="nbHitsCovered"> 148</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.inheritType = inheritType;</pre></td></tr>
-<tr> <td class="numLineCover"> 80</td> <td class="nbHitsCovered"> 148</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.caseSensitive = caseSensitive;</pre></td></tr>
-<tr> <td class="numLineCover"> 81</td> <td class="nbHitsCovered"> 148</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 73</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.permitGroups = permitGroups;</pre></td></tr>
+<tr> <td class="numLineCover"> 74</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.denyGroups = denyGroups;</pre></td></tr>
+<tr> <td class="numLineCover"> 75</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.permitUsers = permitUsers;</pre></td></tr>
+<tr> <td class="numLineCover"> 76</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.denyUsers = denyUsers;</pre></td></tr>
+<tr> <td class="numLineCover"> 77</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.inheritFrom = inheritFrom;</pre></td></tr>
+<tr> <td class="numLineCover"> 78</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.inheritFromFragment = inheritFromFragment;</pre></td></tr>
+<tr> <td class="numLineCover"> 79</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.inheritType = inheritType;</pre></td></tr>
+<tr> <td class="numLineCover"> 80</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.caseSensitive = caseSensitive;</pre></td></tr>
+<tr> <td class="numLineCover"> 81</td> <td class="nbHitsCovered"> 149</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>
@@ -850,12 +850,12 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 486</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> equals(Object o) {</pre></td></tr>
-<tr> <td class="numLineCover"> 487</td> <td class="nbHitsCovered"><a title="Line 487: Conditional coverage 100% (2/2)."> 60</a></td> <td class="src"><pre class="src"> <a title="Line 487: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!(o <span class="keyword">instanceof</span> Acl)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 487</td> <td class="nbHitsCovered"><a title="Line 487: Conditional coverage 100% (2/2)."> 61</a></td> <td class="src"><pre class="src"> <a title="Line 487: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!(o <span class="keyword">instanceof</span> Acl)) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 488</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine"> 489</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 490</td> <td class="nbHitsCovered"><a title="Line 490: Conditional coverage 100% (2/2)."> 59</a></td> <td class="src"><pre class="src"> <a title="Line 490: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">this</span> == o) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 491</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 490</td> <td class="nbHitsCovered"><a title="Line 490: Conditional coverage 100% (2/2)."> 60</a></td> <td class="src"><pre class="src"> <a title="Line 490: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">this</span> == o) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 491</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine"> 492</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLineCover"> 493</td> <td class="nbHitsCovered"> 54</td> <td class="src"><pre class="src"> Acl a = (Acl) o;</pre></td></tr>
@@ -894,7 +894,7 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 511</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"> 512</td> <td class="nbHitsCovered"> 335</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Arrays.hashCode(<span class="keyword">new</span> Object[] {</pre></td></tr>
+<tr> <td class="numLineCover"> 512</td> <td class="nbHitsCovered"> 336</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Arrays.hashCode(<span class="keyword">new</span> Object[] {</pre></td></tr>
<tr> <td class="numLine"> 513</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> permitGroups, denyGroups, permitUsers, denyUsers,</pre></td></tr>
<tr> <td class="numLine"> 514</td> <td class="nbHits"> </td>
@@ -988,16 +988,16 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 559</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> Builder {</pre></td></tr>
-<tr> <td class="numLineCover"> 560</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Set<GroupPrincipal> permitGroups = Collections.emptySet();</pre></td></tr>
-<tr> <td class="numLineCover"> 561</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Set<GroupPrincipal> denyGroups = Collections.emptySet();</pre></td></tr>
-<tr> <td class="numLineCover"> 562</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Set<UserPrincipal> permitUsers = Collections.emptySet();</pre></td></tr>
-<tr> <td class="numLineCover"> 563</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Set<UserPrincipal> denyUsers = Collections.emptySet();</pre></td></tr>
+<tr> <td class="numLineCover"> 560</td> <td class="nbHitsCovered"> 150</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Set<GroupPrincipal> permitGroups = Collections.emptySet();</pre></td></tr>
+<tr> <td class="numLineCover"> 561</td> <td class="nbHitsCovered"> 150</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Set<GroupPrincipal> denyGroups = Collections.emptySet();</pre></td></tr>
+<tr> <td class="numLineCover"> 562</td> <td class="nbHitsCovered"> 150</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Set<UserPrincipal> permitUsers = Collections.emptySet();</pre></td></tr>
+<tr> <td class="numLineCover"> 563</td> <td class="nbHitsCovered"> 150</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Set<UserPrincipal> denyUsers = Collections.emptySet();</pre></td></tr>
<tr> <td class="numLine"> 564</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> DocId inheritFrom;</pre></td></tr>
<tr> <td class="numLine"> 565</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> String inheritFromFragment;</pre></td></tr>
-<tr> <td class="numLineCover"> 566</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">private</span> InheritanceType inheritType = InheritanceType.LEAF_NODE;</pre></td></tr>
-<tr> <td class="numLineCover"> 567</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> caseSensitive = <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 566</td> <td class="nbHitsCovered"> 150</td> <td class="src"><pre class="src"> <span class="keyword">private</span> InheritanceType inheritType = InheritanceType.LEAF_NODE;</pre></td></tr>
+<tr> <td class="numLineCover"> 567</td> <td class="nbHitsCovered"> 150</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> caseSensitive = <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine"> 568</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 569</td> <td class="nbHits"> </td>
@@ -1008,7 +1008,7 @@
<td class="src"><pre class="src"> <span class="comment"> * null}, and inheritType is {@link InheritanceType#LEAF_NODE}.</span></pre></td></tr>
<tr> <td class="numLine"> 572</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 573</td> <td class="nbHitsCovered"> 212</td> <td class="src"><pre class="src"> <span class="keyword">public</span> Builder() {}</pre></td></tr>
+<tr> <td class="numLineCover"> 573</td> <td class="nbHitsCovered"> 214</td> <td class="src"><pre class="src"> <span class="keyword">public</span> Builder() {}</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="numLine"> 575</td> <td class="nbHits"> </td>
@@ -1061,7 +1061,7 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 607</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> Acl build() {</pre></td></tr>
-<tr> <td class="numLineCover"> 608</td> <td class="nbHitsCovered"> 148</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> Acl(permitGroups, denyGroups, permitUsers, denyUsers,</pre></td></tr>
+<tr> <td class="numLineCover"> 608</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> Acl(permitGroups, denyGroups, permitUsers, denyUsers,</pre></td></tr>
<tr> <td class="numLine"> 609</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> inheritFrom, inheritFromFragment, inheritType, caseSensitive);</pre></td></tr>
<tr> <td class="numLine"> 610</td> <td class="nbHits"> </td>
@@ -1272,9 +1272,9 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 728</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> Builder setInheritFrom(DocId inheritFrom) {</pre></td></tr>
-<tr> <td class="numLineCover"> 729</td> <td class="nbHitsCovered"> 45</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.inheritFrom = inheritFrom;</pre></td></tr>
-<tr> <td class="numLineCover"> 730</td> <td class="nbHitsCovered"> 45</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.inheritFromFragment = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 731</td> <td class="nbHitsCovered"> 45</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">this</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 729</td> <td class="nbHitsCovered"> 46</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.inheritFrom = inheritFrom;</pre></td></tr>
+<tr> <td class="numLineCover"> 730</td> <td class="nbHitsCovered"> 46</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.inheritFromFragment = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 731</td> <td class="nbHitsCovered"> 46</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">this</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="numLine"> 733</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.AdaptorContext.html b/coverage/com.google.enterprise.adaptor.AdaptorContext.html
index 00a5a2f..f03e7f2 100644
--- a/coverage/com.google.enterprise.adaptor.AdaptorContext.html
+++ b/coverage/com.google.enterprise.adaptor.AdaptorContext.html
@@ -92,178 +92,190 @@
<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * A way to construct URIs from DocIds.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Callback object for asynchronously pushing {@code DocId}s to the GSA</span></pre></td></tr>
<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * at any time.</span></pre></td></tr>
<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdEncoder getDocIdEncoder();</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AsyncDocIdPusher getAsyncDocIdPusher();</pre></td></tr>
<tr> <td class="numLine"> 42</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"> 43</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Add a status source to the dashboard. The source will automatically be</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * removed just before {@link Adaptor#destroy}. Source registration should</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * A way to construct URIs from DocIds.</span></pre></td></tr>
<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * occur during {@link Adaptor#init}.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdEncoder getDocIdEncoder();</pre></td></tr>
<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> addStatusSource(StatusSource source);</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 48</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"> 49</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Add a status source to the dashboard. The source will automatically be</span></pre></td></tr>
<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Override the default {@link ExceptionHandler} for full push.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * removed just before {@link Adaptor#destroy}. Source registration should</span></pre></td></tr>
<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * occur during {@link Adaptor#init}.</span></pre></td></tr>
<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsFullErrorHandler(ExceptionHandler handler);</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> addStatusSource(StatusSource source);</pre></td></tr>
<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Retrieve the current {@link ExceptionHandler} for full push.</span></pre></td></tr>
-<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> ExceptionHandler getGetDocIdsFullErrorHandler();</pre></td></tr>
-<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Override the default {@link ExceptionHandler} for incremental push.</span></pre></td></tr>
-<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Override the default {@link ExceptionHandler} for full push.</span></pre></td></tr>
+<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsFullErrorHandler(ExceptionHandler handler);</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="numLine"> 60</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Retrieve the current {@link ExceptionHandler} for full push.</span></pre></td></tr>
<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsIncrementalErrorHandler(</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> ExceptionHandler handler);</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> ExceptionHandler getGetDocIdsFullErrorHandler();</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="numLine"> 65</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Retrieve the current {@link ExceptionHandler} for incremental push.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Override the default {@link ExceptionHandler} for incremental push.</span></pre></td></tr>
<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> ExceptionHandler getGetDocIdsIncrementalErrorHandler();</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsIncrementalErrorHandler(</pre></td></tr>
<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> ExceptionHandler handler);</pre></td></tr>
<tr> <td class="numLine"> 70</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"> 71</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Retrieve decoder for sensitive values, like passwords. To protect sensitive</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * values, the user should have previously encoded them using the Dashboard.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Retrieve the current {@link ExceptionHandler} for incremental push.</span></pre></td></tr>
<tr> <td class="numLine"> 73</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * However, a user is still allowed to choose to keep sensitive values in</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * plain text.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> ExceptionHandler getGetDocIdsIncrementalErrorHandler();</pre></td></tr>
<tr> <td class="numLine"> 75</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"> 76</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> SensitiveValueDecoder getSensitiveValueDecoder();</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Retrieve decoder for sensitive values, like passwords. To protect sensitive</span></pre></td></tr>
<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * values, the user should have previously encoded them using the Dashboard.</span></pre></td></tr>
<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Registers a handler with the library's {@link</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * However, a user is still allowed to choose to keep sensitive values in</span></pre></td></tr>
<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * com.sun.net.httpserver.HttpServer} in similar fashion to {@link</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * plain text.</span></pre></td></tr>
<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * com.sun.net.httpserver.HttpServer#createContext}. The handler will</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * automatically be removed during adaptor shutdown. Handler registration</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> SensitiveValueDecoder getSensitiveValueDecoder();</pre></td></tr>
<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * should occur during {@link Adaptor#init}.</span></pre></td></tr>
+ <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="comment"> *</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * <p>Although {@code path} may be passed directly to the underlying {@code</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Registers a handler with the library's {@link</span></pre></td></tr>
<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * HttpServer}, that is not necessarily the case. Thus, implementations should</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * com.sun.net.httpserver.HttpServer} in similar fashion to {@link</span></pre></td></tr>
<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * use the returned context's path when forming URLs to the handler. In</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * com.sun.net.httpserver.HttpServer#createContext}. The handler will</span></pre></td></tr>
<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * addition, the handler and context may be modified before being returned;</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * automatically be removed during adaptor shutdown. Handler registration</span></pre></td></tr>
<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * this is primarily to allow adding commonly-needed filters for error</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * should occur during {@link Adaptor#init}.</span></pre></td></tr>
<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * handling and logging, but also available for implementation-specific needs.</span></pre></td></tr>
-<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"> 92</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> HttpContext createHttpContext(String path, HttpHandler handler);</pre></td></tr>
-<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Get the session for the user communicating via {@code ex}. If a session</span></pre></td></tr>
-<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * does not already exist, then {@code create} determines if one should be</span></pre></td></tr>
-<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * created.</span></pre></td></tr>
-<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
-<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @param ex exchange which user issued request</span></pre></td></tr>
-<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @param create whether a new session should be created if one does not</span></pre></td></tr>
-<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * already exist for this user</span></pre></td></tr>
-<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @return user's session, or {@code null} if session did not already exist</span></pre></td></tr>
-<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * and {@code create = false}</span></pre></td></tr>
-<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <p>Although {@code path} may be passed directly to the underlying {@code</span></pre></td></tr>
+<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * HttpServer}, that is not necessarily the case. Thus, implementations should</span></pre></td></tr>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * use the returned context's path when forming URLs to the handler. In</span></pre></td></tr>
+<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * addition, the handler and context may be modified before being returned;</span></pre></td></tr>
+<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * this is primarily to allow adding commonly-needed filters for error</span></pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * handling and logging, but also available for implementation-specific needs.</span></pre></td></tr>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Session getUserSession(HttpExchange ex, <span class="keyword">boolean</span> create);</pre></td></tr>
-<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> HttpContext createHttpContext(String path, HttpHandler handler);</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"> 107</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get the session for the user communicating via {@code ex}. If a session</span></pre></td></tr>
+<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * does not already exist, then {@code create} determines if one should be</span></pre></td></tr>
+<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * created.</span></pre></td></tr>
+<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param ex exchange which user issued request</span></pre></td></tr>
+<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param create whether a new session should be created if one does not</span></pre></td></tr>
+<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * already exist for this user</span></pre></td></tr>
<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Register a polling incremental lister, so that it can be called when</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @return user's session, or {@code null} if session did not already exist</span></pre></td></tr>
<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * appropriate. Registration may not occur after {@link Adaptor#init}.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * and {@code create = false}</span></pre></td></tr>
<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"> 111</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setPollingIncrementalLister(PollingIncrementalLister lister);</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Session getUserSession(HttpExchange ex, <span class="keyword">boolean</span> create);</pre></td></tr>
<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Register an authentication provider, so it can authenticate users for the</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Register a polling incremental lister, so that it can be called when</span></pre></td></tr>
<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * GSA. Registration may not occur after {@link Adaptor#init}.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * appropriate. Registration may not occur after {@link Adaptor#init}.</span></pre></td></tr>
<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setAuthnAuthority(AuthnAuthority authnAuthority);</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setPollingIncrementalLister(PollingIncrementalLister lister);</pre></td></tr>
<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Register an authorization provider, so it can check authorization of users</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Register an authentication provider, so it can authenticate users for the</span></pre></td></tr>
<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * for the GSA. Registration may not occur after {@link Adaptor#init}.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * GSA. Registration may not occur after {@link Adaptor#init}.</span></pre></td></tr>
<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setAuthzAuthority(AuthzAuthority authzAuthority);</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setAuthnAuthority(AuthnAuthority authnAuthority);</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"> <span class="comment"> * Register an authorization provider, so it can check authorization of users</span></pre></td></tr>
+<tr> <td class="numLine"> 127</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * for the GSA. Registration may not occur after {@link Adaptor#init}.</span></pre></td></tr>
+<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setAuthzAuthority(AuthzAuthority authzAuthority);</pre></td></tr>
+<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.AsyncDocIdPusher.html b/coverage/com.google.enterprise.adaptor.AsyncDocIdPusher.html
new file mode 100644
index 0000000..eac1031
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.AsyncDocIdPusher.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.AsyncDocIdPusher</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdPusher.html">AsyncDocIdPusher</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2014 Google Inc. All Rights Reserved.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor;</pre></td></tr>
+<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="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Interface that allows asynchronous at-will pushing of {@code DocId}s</span></pre></td></tr>
+<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * to the GSA.</span></pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></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">interface</span> AsyncDocIdPusher {</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Push a {@code DocId} asynchronously to the GSA. The {@code DocId} is</span></pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * enqueued and sent in the next batch to the GSA. If the queue is full,</span></pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * then the item will be dropped and a warning will be logged.</span></pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> pushDocId(DocId docId);</pre></td></tr>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Push a {@code Record} asynchronously to the GSA. The {@code Record}</span></pre></td></tr>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * is enqueued and sent in the next batch to the GSA. If the queue is full,</span></pre></td></tr>
+<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * then the item will be dropped and a warning will be logged.</span></pre></td></tr>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> pushRecord(DocIdPusher.Record record);</pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Push a named resource asynchronously to the GSA. The named resource is</span></pre></td></tr>
+<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * enqueued and sent in the next batch to the GSA. If the queue is full,</span></pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * then the item will be dropped and a warning will be logged.</span></pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <p>Named resources are {@code DocId}s without any content or metadata,</span></pre></td></tr>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * that only exist for ACL inheritance. These {@code DocId} will never be</span></pre></td></tr>
+<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * visible to the user and have no meaning outside of ACL processing.</span></pre></td></tr>
+<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> pushNamedResource(DocId docId, Acl acl);</pre></td></tr>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.AsyncDocIdSender.html b/coverage/com.google.enterprise.adaptor.AsyncDocIdSender.html
index 3747524..a2d4c1a 100644
--- a/coverage/com.google.enterprise.adaptor.AsyncDocIdSender.html
+++ b/coverage/com.google.enterprise.adaptor.AsyncDocIdSender.html
@@ -12,10 +12,10 @@
<div class="separator"> </div>
<table class="report">
<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
- <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">18/18</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">8/8</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8;</span>2.8</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8;</span>2.8</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender$ItemPusher</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8;</span>2.8</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender$WorkerRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:92px"><span class="text">13/14</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8;</span>2.8</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">24/24</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">8/8</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.125;</span>2.125</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.125;</span>2.125</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender$ItemPusher</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.125;</span>2.125</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender$WorkerRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:92px"><span class="text">13/14</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.125;</span>2.125</td></tr>
</table>
<div class="separator"> </div>
@@ -70,159 +70,185 @@
<td class="src"><pre class="src"> <span class="comment"> * and running for items to be sent.</span></pre></td></tr>
<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 26</td> <td class="nbHitsCovered"> 149</td> <td class="src"><pre class="src"> <span class="keyword">class</span> AsyncDocIdSender <span class="keyword">implements</span> DocumentHandler.AsyncPusher {</pre></td></tr>
-<tr> <td class="numLineCover"> 27</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"> 28</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> = Logger.getLogger(AsyncDocIdSender.<span class="keyword">class</span>.getName());</pre></td></tr>
+<tr> <td class="numLineCover"> 26</td> <td class="nbHitsCovered"> 173</td> <td class="src"><pre class="src"> <span class="keyword">class</span> AsyncDocIdSender <span class="keyword">implements</span> AsyncDocIdPusher,</pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> DocumentHandler.AsyncPusher {</pre></td></tr>
+<tr> <td class="numLineCover"> 28</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"> 29</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> = Logger.getLogger(AsyncDocIdSender.<span class="keyword">class</span>.getName());</pre></td></tr>
<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ItemPusher itemPusher;</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">int</span> maxBatchSize;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ItemPusher itemPusher;</pre></td></tr>
<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">long</span> maxLatency;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">int</span> maxBatchSize;</pre></td></tr>
<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> TimeUnit maxLatencyUnit;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">long</span> maxLatency;</pre></td></tr>
<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> TimeUnit maxLatencyUnit;</pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> BlockingQueue<DocIdPusher.Item> queue;</pre></td></tr>
-<tr> <td class="numLineCover"> 35</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Runnable worker = <span class="keyword">new</span> WorkerRunnable();</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="numLineCover"> 36</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Runnable worker = <span class="keyword">new</span> WorkerRunnable();</pre></td></tr>
<tr> <td class="numLine"> 37</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"> 38</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * {@code queueCapacity} should be large enough to handle queuing the number</span></pre></td></tr>
-<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * of new items that would be expected during the amount of time it takes to</span></pre></td></tr>
-<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * send a feed. For example, if requests are coming in at 300 docs/sec and it</span></pre></td></tr>
-<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * takes a second to send a feed of {@code maxBatchSize}, then {@code</span></pre></td></tr>
-<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * queueCapacity} should be at least {@code 300}.</span></pre></td></tr>
-<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> AsyncDocIdSender(ItemPusher itemPusher, <span class="keyword">int</span> maxBatchSize,</pre></td></tr>
-<tr> <td class="numLineCover"> 45</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">long</span> maxLatency, TimeUnit maxLatencyUnit, <span class="keyword">int</span> queueCapacity) {</pre></td></tr>
-<tr> <td class="numLineCover"> 46</td> <td class="nbHitsCovered"><a title="Line 46: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 22</a></td> <td class="src"><pre class="src"> <a title="Line 46: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (itemPusher == <span class="keyword">null</span> || maxLatencyUnit == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 47</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</pre></td></tr>
-<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 49</td> <td class="nbHitsCovered"><a title="Line 49: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 49: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (maxBatchSize < 1) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 50</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"maxBatchSize must be positive"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 52</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.itemPusher = itemPusher;</pre></td></tr>
-<tr> <td class="numLineCover"> 53</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.maxBatchSize = maxBatchSize;</pre></td></tr>
-<tr> <td class="numLineCover"> 54</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.maxLatency = maxLatency;</pre></td></tr>
-<tr> <td class="numLineCover"> 55</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.maxLatencyUnit = maxLatencyUnit;</pre></td></tr>
-<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.queue = <span class="keyword">new</span> ArrayBlockingQueue<DocIdPusher.Item>(queueCapacity);</pre></td></tr>
-<tr> <td class="numLineCover"> 57</td> <td class="nbHitsCovered"> 19</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"> </pre></td></tr>
-<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Enqueue {@code item} to be sent by worker. If the queue is full, then the</span></pre></td></tr>
-<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * item will be dropped and a warning will be logged.</span></pre></td></tr>
-<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * {@code queueCapacity} should be large enough to handle queuing the number</span></pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * of new items that would be expected during the amount of time it takes to</span></pre></td></tr>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * send a feed. For example, if requests are coming in at 300 docs/sec and it</span></pre></td></tr>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * takes a second to send a feed of {@code maxBatchSize}, then {@code</span></pre></td></tr>
+<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * queueCapacity} should be at least {@code 300}.</span></pre></td></tr>
+<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> asyncPushItem(<span class="keyword">final</span> DocIdPusher.Item item) {</pre></td></tr>
-<tr> <td class="numLineCover"> 65</td> <td class="nbHitsCovered"><a title="Line 65: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 65: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!queue.offer(item)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Failed to queue item: {0}"</span>, item);</pre></td></tr>
-<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AsyncDocIdSender(ItemPusher itemPusher, <span class="keyword">int</span> maxBatchSize,</pre></td></tr>
+<tr> <td class="numLineCover"> 46</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">long</span> maxLatency, TimeUnit maxLatencyUnit, <span class="keyword">int</span> queueCapacity) {</pre></td></tr>
+<tr> <td class="numLineCover"> 47</td> <td class="nbHitsCovered"><a title="Line 47: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 26</a></td> <td class="src"><pre class="src"> <a title="Line 47: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (itemPusher == <span class="keyword">null</span> || maxLatencyUnit == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 48</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</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"> 68</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 50</td> <td class="nbHitsCovered"><a title="Line 50: Conditional coverage 100% (2/2)."> 24</a></td> <td class="src"><pre class="src"> <a title="Line 50: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (maxBatchSize < 1) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 51</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"maxBatchSize must be positive"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 53</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.itemPusher = itemPusher;</pre></td></tr>
+<tr> <td class="numLineCover"> 54</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.maxBatchSize = maxBatchSize;</pre></td></tr>
+<tr> <td class="numLineCover"> 55</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.maxLatency = maxLatency;</pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.maxLatencyUnit = maxLatencyUnit;</pre></td></tr>
+<tr> <td class="numLineCover"> 57</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.queue = <span class="keyword">new</span> ArrayBlockingQueue<DocIdPusher.Item>(queueCapacity);</pre></td></tr>
+<tr> <td class="numLineCover"> 58</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> }</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="numLine"> 60</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Enqueue {@code item} to be sent by worker. If the queue is full, then the</span></pre></td></tr>
+<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * item will be dropped and a warning will be logged.</span></pre></td></tr>
+<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> asyncPushItem(<span class="keyword">final</span> DocIdPusher.Item item) {</pre></td></tr>
+<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"><a title="Line 66: Conditional coverage 100% (2/2)."> 9</a></td> <td class="src"><pre class="src"> <a title="Line 66: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!queue.offer(item)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Failed to queue item: {0}"</span>, item);</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="numLineCover"> 69</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Runnable worker() {</pre></td></tr>
-<tr> <td class="numLineCover"> 71</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">return</span> worker;</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</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="numLineCover"> 74</td> <td class="nbHitsCovered"> 44</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> WorkerRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> pushDocId(DocId docId) {</pre></td></tr>
+<tr> <td class="numLineCover"> 73</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> asyncPushItem(<span class="keyword">new</span> DocIdPusher.Record.Builder(docId).build());</pre></td></tr>
+<tr> <td class="numLineCover"> 74</td> <td class="nbHitsCovered"> 1</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"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 76</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"> 77</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> Set<DocIdPusher.Item> items = <span class="keyword">new</span> LinkedHashSet<DocIdPusher.Item>();</pre></td></tr>
-<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLine"> 79</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="numLineCover"> 80</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> BlockingQueueBatcher.take(</pre></td></tr>
-<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> queue, items, maxBatchSize, maxLatency, maxLatencyUnit);</pre></td></tr>
-<tr> <td class="numLineCover"> 82</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> itemPusher.pushItems(items.iterator(), <span class="keyword">null</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> items.clear();</pre></td></tr>
-<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 85</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (InterruptedException ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 86</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"AsyncDocIdSender worker shutting down"</span>, ex);</pre></td></tr>
-<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// We are shutting down, but there are likely items that haven't been</span></pre></td></tr>
-<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// sent because of maxLatency, so we try to send those now.</span></pre></td></tr>
-<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// If we were interrupted between calls to take(), then take() may</span></pre></td></tr>
-<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// have interrupted itself before draining the queue; might as well</span></pre></td></tr>
-<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// send everything that was put on the queue.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> queue.drainTo(items);</pre></td></tr>
-<tr> <td class="numLineCover"> 94</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> itemPusher.pushItems(items.iterator(),</pre></td></tr>
-<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> ExceptionHandlers.noRetryHandler());</pre></td></tr>
-<tr> <td class="numLineCover"> 96</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException ex2) {</span></pre></td></tr>
-<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Ignore, because we are going to interrupt anyway. This should</span></pre></td></tr>
-<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// actually not happen because of the ExceptionHandler we are using,</span></pre></td></tr>
-<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// but the precise behavior of pushItems() may change in the future.</span></pre></td></tr>
-<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 101</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"AsyncDocIdSender worker shutdown"</span>, ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 102</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> Thread.currentThread().interrupt();</pre></td></tr>
-<tr> <td class="numLineCover"> 103</td> <td class="nbHitsCovered"> 18</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="numLineCover"> 105</td> <td class="nbHitsCovered"> 18</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"> </pre></td></tr>
-<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">interface</span> ItemPusher {</pre></td></tr>
-<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Send {@code items} using {@code handler} to manage errors.</span></pre></td></tr>
-<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
-<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @returns {@code null} for success, or the first item that failed if not</span></pre></td></tr>
-<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * all items were sent</span></pre></td></tr>
-<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <T <span class="keyword">extends</span> DocIdPusher.Item> T pushItems(Iterator<T> items,</pre></td></tr>
-<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> ExceptionHandler handler) <span class="keyword">throws</span> InterruptedException;</pre></td></tr>
-<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> pushRecord(DocIdPusher.Record record) {</pre></td></tr>
+<tr> <td class="numLineCover"> 78</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> asyncPushItem(record);</pre></td></tr>
+<tr> <td class="numLineCover"> 79</td> <td class="nbHitsCovered"> 1</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"> </pre></td></tr>
+<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> pushNamedResource(DocId docId, Acl acl) {</pre></td></tr>
+<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> asyncPushItem(<span class="keyword">new</span> DocIdSender.AclItem(docId, <span class="keyword">null</span>, acl));</pre></td></tr>
+<tr> <td class="numLineCover"> 84</td> <td class="nbHitsCovered"> 1</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="keyword">public</span> Runnable worker() {</pre></td></tr>
+<tr> <td class="numLineCover"> 87</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">return</span> worker;</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"> 118</td> <td class="nbHits"> </td>
+<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"> 52</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> WorkerRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
+<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 92</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"> 93</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> Set<DocIdPusher.Item> items = <span class="keyword">new</span> LinkedHashSet<DocIdPusher.Item>();</pre></td></tr>
+<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLine"> 95</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="numLineCover"> 96</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> BlockingQueueBatcher.take(</pre></td></tr>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> queue, items, maxBatchSize, maxLatency, maxLatencyUnit);</pre></td></tr>
+<tr> <td class="numLineCover"> 98</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> itemPusher.pushItems(items.iterator(), <span class="keyword">null</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 99</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> items.clear();</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="numLineCover"> 101</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (InterruptedException ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 102</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"AsyncDocIdSender worker shutting down"</span>, ex);</pre></td></tr>
+<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// We are shutting down, but there are likely items that haven't been</span></pre></td></tr>
+<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// sent because of maxLatency, so we try to send those now.</span></pre></td></tr>
+<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// If we were interrupted between calls to take(), then take() may</span></pre></td></tr>
+<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// have interrupted itself before draining the queue; might as well</span></pre></td></tr>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// send everything that was put on the queue.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 109</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> queue.drainTo(items);</pre></td></tr>
+<tr> <td class="numLineCover"> 110</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> itemPusher.pushItems(items.iterator(),</pre></td></tr>
+<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ExceptionHandlers.noRetryHandler());</pre></td></tr>
+<tr> <td class="numLineCover"> 112</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException ex2) {</span></pre></td></tr>
+<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Ignore, because we are going to interrupt anyway. This should</span></pre></td></tr>
+<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// actually not happen because of the ExceptionHandler we are using,</span></pre></td></tr>
+<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// but the precise behavior of pushItems() may change in the future.</span></pre></td></tr>
+<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 117</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"AsyncDocIdSender worker shutdown"</span>, ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> Thread.currentThread().interrupt();</pre></td></tr>
+<tr> <td class="numLineCover"> 119</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> }</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"> 121</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> }</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"> <span class="keyword">public</span> <span class="keyword">interface</span> ItemPusher {</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"> <span class="comment"> * Send {@code items} using {@code handler} to manage errors.</span></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"> * @returns {@code null} for success, or the first item that failed if not</span></pre></td></tr>
+<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * all items were sent</span></pre></td></tr>
+<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <T <span class="keyword">extends</span> DocIdPusher.Item> T pushItems(Iterator<T> items,</pre></td></tr>
+<tr> <td class="numLine"> 132</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ExceptionHandler handler) <span class="keyword">throws</span> InterruptedException;</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="numLine"> 134</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.BlockingQueueBatcher.html b/coverage/com.google.enterprise.adaptor.BlockingQueueBatcher.html
index 84ccaf5..ee371a4 100644
--- a/coverage/com.google.enterprise.adaptor.BlockingQueueBatcher.html
+++ b/coverage/com.google.enterprise.adaptor.BlockingQueueBatcher.html
@@ -117,22 +117,22 @@
<td class="src"><pre class="src"> Collection<? <span class="keyword">super</span> T> batch, <span class="keyword">int</span> maxBatchSize, <span class="keyword">long</span> maxLatency,</pre></td></tr>
<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> TimeUnit maxLatencyUnit) <span class="keyword">throws</span> InterruptedException {</pre></td></tr>
-<tr> <td class="numLineCover"> 52</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> <span class="keyword">long</span> maxLatencyNanos = maxLatencyUnit.toNanos(maxLatency);</pre></td></tr>
+<tr> <td class="numLineCover"> 52</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">long</span> maxLatencyNanos = maxLatencyUnit.toNanos(maxLatency);</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="numLineCover"> 54</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> <span class="keyword">int</span> curBatchSize = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 55</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> <span class="keyword">long</span> stopBatchTimeNanos = -1;</pre></td></tr>
+<tr> <td class="numLineCover"> 54</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">int</span> curBatchSize = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 55</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">long</span> stopBatchTimeNanos = -1;</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"> <span class="comment">// The loop flow is 1) block, 2) drain queue, 3) possibly consume batch.</span></pre></td></tr>
<tr> <td class="numLine"> 58</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="numLineCover"> 59</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> timeout = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 60</td> <td class="nbHitsCovered"><a title="Line 60: Conditional coverage 100% (2/2)."> 27</a></td> <td class="src"><pre class="src"> <a title="Line 60: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (stopBatchTimeNanos == -1) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 59</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> timeout = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 60</td> <td class="nbHitsCovered"><a title="Line 60: Conditional coverage 100% (2/2)."> 30</a></td> <td class="src"><pre class="src"> <a title="Line 60: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (stopBatchTimeNanos == -1) {</a></pre></td></tr>
<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Start of new batch. Block for the first item of this batch.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 62</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> batch.add(queue.take());</pre></td></tr>
+<tr> <td class="numLineCover"> 62</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> batch.add(queue.take());</pre></td></tr>
<tr> <td class="numLineCover"> 63</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> curBatchSize++;</pre></td></tr>
<tr> <td class="numLineCover"> 64</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> stopBatchTimeNanos = timeProvider.relativeTime(TimeUnit.NANOSECONDS)</pre></td></tr>
<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.CircularBufferHandler.html b/coverage/com.google.enterprise.adaptor.CircularBufferHandler.html
index c482a7d..c39b422 100644
--- a/coverage/com.google.enterprise.adaptor.CircularBufferHandler.html
+++ b/coverage/com.google.enterprise.adaptor.CircularBufferHandler.html
@@ -103,17 +103,17 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="keyword">void</span> publish(LogRecord record) {</pre></td></tr>
-<tr> <td class="numLineCover"> 48</td> <td class="nbHitsUncovered"><a title="Line 48: Conditional coverage 50% (1/2)."> 35</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> (!isLoggable(record)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 48</td> <td class="nbHitsUncovered"><a title="Line 48: Conditional coverage 50% (1/2)."> 36</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> (!isLoggable(record)) {</a></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">return</span>;</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="numLineCover"> 51</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> buffer[tail] = record;</pre></td></tr>
-<tr> <td class="numLineCover"> 52</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> tail = (tail + 1) % buffer.length;</pre></td></tr>
-<tr> <td class="numLineCover"> 53</td> <td class="nbHitsUncovered"><a title="Line 53: Conditional coverage 50% (1/2)."> 35</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 53: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (head == tail) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 51</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> buffer[tail] = record;</pre></td></tr>
+<tr> <td class="numLineCover"> 52</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> tail = (tail + 1) % buffer.length;</pre></td></tr>
+<tr> <td class="numLineCover"> 53</td> <td class="nbHitsUncovered"><a title="Line 53: Conditional coverage 50% (1/2)."> 36</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 53: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (head == tail) {</a></span></pre></td></tr>
<tr> <td class="numLineCover"> 54</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> head = (head + 1) % buffer.length;</span></pre></td></tr>
<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 36</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>
diff --git a/coverage/com.google.enterprise.adaptor.Config.html b/coverage/com.google.enterprise.adaptor.Config.html
index 49e1199..41d0762 100644
--- a/coverage/com.google.enterprise.adaptor.Config.html
+++ b/coverage/com.google.enterprise.adaptor.Config.html
@@ -1017,7 +1017,7 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 554</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">int</span> getFeedMaxUrls() {</pre></td></tr>
-<tr> <td class="numLineCover"> 555</td> <td class="nbHitsCovered"> 52</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Integer.parseInt(getValue(<span class="string">"feed.maxUrls"</span>));</pre></td></tr>
+<tr> <td class="numLineCover"> 555</td> <td class="nbHitsCovered"> 54</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Integer.parseInt(getValue(<span class="string">"feed.maxUrls"</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="numLine"> 557</td> <td class="nbHits"> </td>
@@ -1222,14 +1222,14 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 687</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> String getRawValue(String key) {</pre></td></tr>
-<tr> <td class="numLineCover"> 688</td> <td class="nbHitsCovered"> 1029</td> <td class="src"><pre class="src"> String value = config.getProperty(key);</pre></td></tr>
-<tr> <td class="numLineCover"> 689</td> <td class="nbHitsUncovered"><a title="Line 689: Conditional coverage 50% (1/2)."> 1029</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 689: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (value == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 688</td> <td class="nbHitsCovered"> 1031</td> <td class="src"><pre class="src"> String value = config.getProperty(key);</pre></td></tr>
+<tr> <td class="numLineCover"> 689</td> <td class="nbHitsUncovered"><a title="Line 689: Conditional coverage 50% (1/2)."> 1031</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 689: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (value == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover"> 690</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(MessageFormat.format(</span></pre></td></tr>
<tr> <td class="numLine"> 691</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="string">"You must set configuration key ''{0}''."</span>, key));</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="numLineCover"> 693</td> <td class="nbHitsCovered"> 1029</td> <td class="src"><pre class="src"> <span class="keyword">return</span> value;</pre></td></tr>
+<tr> <td class="numLineCover"> 693</td> <td class="nbHitsCovered"> 1031</td> <td class="src"><pre class="src"> <span class="keyword">return</span> value;</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>
@@ -1256,13 +1256,13 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 706</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> String getValue(String key) {</pre></td></tr>
-<tr> <td class="numLineCover"> 707</td> <td class="nbHitsCovered"> 1028</td> <td class="src"><pre class="src"> String value = getRawValue(key);</pre></td></tr>
-<tr> <td class="numLineCover"> 708</td> <td class="nbHitsCovered"> 1028</td> <td class="src"><pre class="src"> ValueComputer computer = computeMap.get(key);</pre></td></tr>
-<tr> <td class="numLineCover"> 709</td> <td class="nbHitsCovered"><a title="Line 709: Conditional coverage 100% (2/2)."> 1028</a></td> <td class="src"><pre class="src"> <a title="Line 709: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (computer != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 707</td> <td class="nbHitsCovered"> 1030</td> <td class="src"><pre class="src"> String value = getRawValue(key);</pre></td></tr>
+<tr> <td class="numLineCover"> 708</td> <td class="nbHitsCovered"> 1030</td> <td class="src"><pre class="src"> ValueComputer computer = computeMap.get(key);</pre></td></tr>
+<tr> <td class="numLineCover"> 709</td> <td class="nbHitsCovered"><a title="Line 709: Conditional coverage 100% (2/2)."> 1030</a></td> <td class="src"><pre class="src"> <a title="Line 709: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (computer != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 710</td> <td class="nbHitsCovered"> 121</td> <td class="src"><pre class="src"> value = computer.compute(value);</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="numLineCover"> 712</td> <td class="nbHitsCovered"> 1028</td> <td class="src"><pre class="src"> <span class="keyword">return</span> value;</pre></td></tr>
+<tr> <td class="numLineCover"> 712</td> <td class="nbHitsCovered"> 1030</td> <td class="src"><pre class="src"> <span class="keyword">return</span> value;</pre></td></tr>
<tr> <td class="numLine"> 713</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 714</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.DocId.html b/coverage/com.google.enterprise.adaptor.DocId.html
index bd24097..56342c7 100644
--- a/coverage/com.google.enterprise.adaptor.DocId.html
+++ b/coverage/com.google.enterprise.adaptor.DocId.html
@@ -90,13 +90,13 @@
<td class="src"><pre class="src"> <span class="comment"> * @param id non-{@code null} document identifier</span></pre></td></tr>
<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 60442</td> <td class="src"><pre class="src"> <span class="keyword">public</span> DocId(String id) {</pre></td></tr>
-<tr> <td class="numLineCover"> 39</td> <td class="nbHitsCovered"><a title="Line 39: Conditional coverage 100% (2/2)."> 60442</a></td> <td class="src"><pre class="src"> <a title="Line 39: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (id == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 60446</td> <td class="src"><pre class="src"> <span class="keyword">public</span> DocId(String id) {</pre></td></tr>
+<tr> <td class="numLineCover"> 39</td> <td class="nbHitsCovered"><a title="Line 39: Conditional coverage 100% (2/2)."> 60446</a></td> <td class="src"><pre class="src"> <a title="Line 39: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (id == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 40</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</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="numLineCover"> 42</td> <td class="nbHitsCovered"> 60441</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.uniqId = id;</pre></td></tr>
-<tr> <td class="numLineCover"> 43</td> <td class="nbHitsCovered"> 60441</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 60445</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.uniqId = id;</pre></td></tr>
+<tr> <td class="numLineCover"> 43</td> <td class="nbHitsCovered"> 60445</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
@@ -133,12 +133,12 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> equals(Object o) {</pre></td></tr>
-<tr> <td class="numLineCover"> 63</td> <td class="nbHitsCovered"><a title="Line 63: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 30209</a></td> <td class="src"><pre class="src"> <a title="Line 63: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (<span class="keyword">null</span> == o || !getClass().equals(o.getClass())) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 63</td> <td class="nbHitsCovered"><a title="Line 63: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 30212</a></td> <td class="src"><pre class="src"> <a title="Line 63: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (<span class="keyword">null</span> == o || !getClass().equals(o.getClass())) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 64</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 30207</td> <td class="src"><pre class="src"> DocId d = (DocId) o;</pre></td></tr>
-<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"> 30207</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">this</span>.uniqId.equals(d.uniqId);</pre></td></tr>
+<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 30210</td> <td class="src"><pre class="src"> DocId d = (DocId) o;</pre></td></tr>
+<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"> 30210</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">this</span>.uniqId.equals(d.uniqId);</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>
@@ -153,7 +153,7 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 74</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"> 75</td> <td class="nbHitsCovered"> 1391</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">this</span>.uniqId.hashCode();</pre></td></tr>
+<tr> <td class="numLineCover"> 75</td> <td class="nbHitsCovered"> 1395</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">this</span>.uniqId.hashCode();</pre></td></tr>
<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.DocIdPusher.html b/coverage/com.google.enterprise.adaptor.DocIdPusher.html
index 04fba87..8be675a 100644
--- a/coverage/com.google.enterprise.adaptor.DocIdPusher.html
+++ b/coverage/com.google.enterprise.adaptor.DocIdPusher.html
@@ -375,7 +375,7 @@
<td class="src"><pre class="src"> <span class="comment"> * Immutable feed attributes for a document identified by its {@code DocId}.</span></pre></td></tr>
<tr> <td class="numLine"> 177</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 178</td> <td class="nbHitsCovered"> 30111</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">class</span> Record <span class="keyword">implements</span> Item {</pre></td></tr>
+<tr> <td class="numLineCover"> 178</td> <td class="nbHitsCovered"> 30114</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">class</span> Record <span class="keyword">implements</span> Item {</pre></td></tr>
<tr> <td class="numLine"> 179</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> DocId id;</pre></td></tr>
<tr> <td class="numLine"> 180</td> <td class="nbHits"> </td>
@@ -394,15 +394,15 @@
<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> Record(DocId docid, <span class="keyword">boolean</span> delete, Date lastModified,</pre></td></tr>
-<tr> <td class="numLineCover"> 188</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> URI link, <span class="keyword">boolean</span> crawlImmediately, <span class="keyword">boolean</span> crawlOnce, <span class="keyword">boolean</span> lock) {</pre></td></tr>
-<tr> <td class="numLineCover"> 189</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.id = docid;</pre></td></tr>
-<tr> <td class="numLineCover"> 190</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.delete = delete;</pre></td></tr>
-<tr> <td class="numLineCover"> 191</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lastModified = lastModified;</pre></td></tr>
-<tr> <td class="numLineCover"> 192</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.link = link;</pre></td></tr>
-<tr> <td class="numLineCover"> 193</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.crawlImmediately = crawlImmediately;</pre></td></tr>
-<tr> <td class="numLineCover"> 194</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.crawlOnce = crawlOnce;</pre></td></tr>
-<tr> <td class="numLineCover"> 195</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lock = lock;</pre></td></tr>
-<tr> <td class="numLineCover"> 196</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 188</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> URI link, <span class="keyword">boolean</span> crawlImmediately, <span class="keyword">boolean</span> crawlOnce, <span class="keyword">boolean</span> lock) {</pre></td></tr>
+<tr> <td class="numLineCover"> 189</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.id = docid;</pre></td></tr>
+<tr> <td class="numLineCover"> 190</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.delete = delete;</pre></td></tr>
+<tr> <td class="numLineCover"> 191</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lastModified = lastModified;</pre></td></tr>
+<tr> <td class="numLineCover"> 192</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.link = link;</pre></td></tr>
+<tr> <td class="numLineCover"> 193</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.crawlImmediately = crawlImmediately;</pre></td></tr>
+<tr> <td class="numLineCover"> 194</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.crawlOnce = crawlOnce;</pre></td></tr>
+<tr> <td class="numLineCover"> 195</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.lock = lock;</pre></td></tr>
+<tr> <td class="numLineCover"> 196</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> }</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="numLine"> 198</td> <td class="nbHits"> </td>
@@ -528,10 +528,10 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> equals(Object o) {</pre></td></tr>
-<tr> <td class="numLineCover"> 263</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> same = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 264</td> <td class="nbHitsCovered"><a title="Line 264: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 26</a></td> <td class="src"><pre class="src"> <a title="Line 264: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (<span class="keyword">null</span> != o && <span class="keyword">this</span>.getClass().equals(o.getClass())) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 265</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> Record other = (Record) o;</pre></td></tr>
-<tr> <td class="numLineCover"> 266</td> <td class="nbHitsCovered"><a title="Line 266: Conditional coverage 100% (14/14) [each condition: 100%, 100%, 100%, 100%, 100%, 100%, 100%]."> 24</a></td> <td class="src"><pre class="src"> <a title="Line 266: Conditional coverage 100% (14/14) [each condition: 100%, 100%, 100%, 100%, 100%, 100%, 100%]."> same = <span class="keyword">this</span>.id.equals(other.id)</a></pre></td></tr>
+<tr> <td class="numLineCover"> 263</td> <td class="nbHitsCovered"> 28</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> same = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 264</td> <td class="nbHitsCovered"><a title="Line 264: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 28</a></td> <td class="src"><pre class="src"> <a title="Line 264: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (<span class="keyword">null</span> != o && <span class="keyword">this</span>.getClass().equals(o.getClass())) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 265</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> Record other = (Record) o;</pre></td></tr>
+<tr> <td class="numLineCover"> 266</td> <td class="nbHitsCovered"><a title="Line 266: Conditional coverage 100% (14/14) [each condition: 100%, 100%, 100%, 100%, 100%, 100%, 100%]."> 26</a></td> <td class="src"><pre class="src"> <a title="Line 266: Conditional coverage 100% (14/14) [each condition: 100%, 100%, 100%, 100%, 100%, 100%, 100%]."> same = <span class="keyword">this</span>.id.equals(other.id)</a></pre></td></tr>
<tr> <td class="numLine"> 267</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> && (<span class="keyword">this</span>.delete == other.delete)</pre></td></tr>
<tr> <td class="numLine"> 268</td> <td class="nbHits"> </td>
@@ -546,7 +546,7 @@
<td class="src"><pre class="src"> && equalsNullSafe(link, other.link);</pre></td></tr>
<tr> <td class="numLine"> 273</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 274</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">return</span> same;</pre></td></tr>
+<tr> <td class="numLineCover"> 274</td> <td class="nbHitsCovered"> 28</td> <td class="src"><pre class="src"> <span class="keyword">return</span> same;</pre></td></tr>
<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 276</td> <td class="nbHits"> </td>
@@ -561,10 +561,10 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 281</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"> 282</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> Object members[] = <span class="keyword">new</span> Object[] { id, delete, lastModified, link,</pre></td></tr>
+<tr> <td class="numLineCover"> 282</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> Object members[] = <span class="keyword">new</span> Object[] { id, delete, lastModified, link,</pre></td></tr>
<tr> <td class="numLine"> 283</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> crawlImmediately, crawlOnce, lock };</pre></td></tr>
-<tr> <td class="numLineCover"> 284</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Arrays.hashCode(members);</pre></td></tr>
+<tr> <td class="numLineCover"> 284</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Arrays.hashCode(members);</pre></td></tr>
<tr> <td class="numLine"> 285</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 286</td> <td class="nbHits"> </td>
@@ -602,8 +602,8 @@
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">boolean</span> equalsNullSafe(Object a, Object b) {</pre></td></tr>
<tr> <td class="numLine"> 303</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">boolean</span> same;</pre></td></tr>
-<tr> <td class="numLineCover"> 304</td> <td class="nbHitsCovered"><a title="Line 304: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 31</a></td> <td class="src"><pre class="src"> <a title="Line 304: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (<span class="keyword">null</span> == a && <span class="keyword">null</span> == b) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 305</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> same = <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 304</td> <td class="nbHitsCovered"><a title="Line 304: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 35</a></td> <td class="src"><pre class="src"> <a title="Line 304: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (<span class="keyword">null</span> == a && <span class="keyword">null</span> == b) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 305</td> <td class="nbHitsCovered"> 29</td> <td class="src"><pre class="src"> same = <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLineCover"> 306</td> <td class="nbHitsCovered"><a title="Line 306: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 306: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> } <span class="keyword">else</span> <span class="keyword">if</span> (<span class="keyword">null</span> != a && <span class="keyword">null</span> != b) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 307</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> same = a.equals(b);</pre></td></tr>
<tr> <td class="numLine"> 308</td> <td class="nbHits"> </td>
@@ -611,7 +611,7 @@
<tr> <td class="numLineCover"> 309</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> same = <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine"> 310</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 311</td> <td class="nbHitsCovered"> 31</td> <td class="src"><pre class="src"> <span class="keyword">return</span> same;</pre></td></tr>
+<tr> <td class="numLineCover"> 311</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> <span class="keyword">return</span> same;</pre></td></tr>
<tr> <td class="numLine"> 312</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 313</td> <td class="nbHits"> </td>
@@ -624,13 +624,13 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> Builder {</pre></td></tr>
-<tr> <td class="numLineCover"> 318</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">private</span> DocId docid = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 319</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> delete = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 320</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Date lastModified = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 321</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">private</span> URI link = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 322</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> crawlImmediately = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 323</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> crawlOnce = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 324</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> lock = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 318</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">private</span> DocId docid = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 319</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> delete = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 320</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Date lastModified = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 321</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">private</span> URI link = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 322</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> crawlImmediately = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 323</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> crawlOnce = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 324</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> lock = <span class="keyword">false</span>;</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>
@@ -643,13 +643,13 @@
<td class="src"><pre class="src"> <span class="comment"> * @param id non-{@code null} identifier for the document being described</span></pre></td></tr>
<tr> <td class="numLine"> 330</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 331</td> <td class="nbHitsCovered"> 30055</td> <td class="src"><pre class="src"> <span class="keyword">public</span> Builder(DocId id) {</pre></td></tr>
-<tr> <td class="numLineCover"> 332</td> <td class="nbHitsCovered"><a title="Line 332: Conditional coverage 100% (2/2)."> 30055</a></td> <td class="src"><pre class="src"> <a title="Line 332: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == id) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 331</td> <td class="nbHitsCovered"> 30058</td> <td class="src"><pre class="src"> <span class="keyword">public</span> Builder(DocId id) {</pre></td></tr>
+<tr> <td class="numLineCover"> 332</td> <td class="nbHitsCovered"><a title="Line 332: Conditional coverage 100% (2/2)."> 30058</a></td> <td class="src"><pre class="src"> <a title="Line 332: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == id) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 333</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</pre></td></tr>
<tr> <td class="numLine"> 334</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 335</td> <td class="nbHitsCovered"> 30054</td> <td class="src"><pre class="src"> docid = id;</pre></td></tr>
-<tr> <td class="numLineCover"> 336</td> <td class="nbHitsCovered"> 30054</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 335</td> <td class="nbHitsCovered"> 30057</td> <td class="src"><pre class="src"> docid = id;</pre></td></tr>
+<tr> <td class="numLineCover"> 336</td> <td class="nbHitsCovered"> 30057</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"> </pre></td></tr>
<tr> <td class="numLine"> 338</td> <td class="nbHits"> </td>
@@ -837,7 +837,7 @@
<td class="src"><pre class="src"> <span class="comment">/** Creates single instance of Record. Does not reset builder. */</span></pre></td></tr>
<tr> <td class="numLine"> 442</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> Record build() {</pre></td></tr>
-<tr> <td class="numLineCover"> 443</td> <td class="nbHitsCovered"> 30062</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> Record(docid, delete, lastModified,</pre></td></tr>
+<tr> <td class="numLineCover"> 443</td> <td class="nbHitsCovered"> 30065</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> Record(docid, delete, lastModified,</pre></td></tr>
<tr> <td class="numLine"> 444</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> link, crawlImmediately, crawlOnce, lock);</pre></td></tr>
<tr> <td class="numLine"> 445</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.DocIdSender.html b/coverage/com.google.enterprise.adaptor.DocIdSender.html
index 928c562..4d66e8b 100644
--- a/coverage/com.google.enterprise.adaptor.DocIdSender.html
+++ b/coverage/com.google.enterprise.adaptor.DocIdSender.html
@@ -12,8 +12,8 @@
<div class="separator"> </div>
<table class="report">
<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
- <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">31</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:81px"><span class="text">139/170</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">12</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:77px"><span class="text">42/54</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.375;</span>4.375</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender$AclItem</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">13/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.375;</span>4.375</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">31</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:81px"><span class="text">139/170</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">12</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:77px"><span class="text">42/54</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.277777777777778;</span>4.278</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender$AclItem</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">20/20</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">8</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:55px"><span class="text">10/18</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.277777777777778;</span>4.278</td></tr>
</table>
<div class="separator"> </div>
@@ -592,15 +592,15 @@
<tr> <td class="numLineCover"> 372</td> <td class="nbHitsCovered"> 9</td> <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="numLineCover"> 374</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">public</span> AclItem(DocId id, String docIdFragment, Acl acl) {</pre></td></tr>
-<tr> <td class="numLineCover"> 375</td> <td class="nbHitsCovered"><a title="Line 375: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 16</a></td> <td class="src"><pre class="src"> <a title="Line 375: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (id == <span class="keyword">null</span> || acl == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 374</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> <span class="keyword">public</span> AclItem(DocId id, String docIdFragment, Acl acl) {</pre></td></tr>
+<tr> <td class="numLineCover"> 375</td> <td class="nbHitsCovered"><a title="Line 375: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 18</a></td> <td class="src"><pre class="src"> <a title="Line 375: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (id == <span class="keyword">null</span> || acl == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 376</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException(<span class="string">"DocId and Acl must not be null"</span>);</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"> 14</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.id = id;</pre></td></tr>
-<tr> <td class="numLineCover"> 379</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.docIdFragment = docIdFragment;</pre></td></tr>
-<tr> <td class="numLineCover"> 380</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.acl = acl;</pre></td></tr>
-<tr> <td class="numLineCover"> 381</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 378</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.id = id;</pre></td></tr>
+<tr> <td class="numLineCover"> 379</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.docIdFragment = docIdFragment;</pre></td></tr>
+<tr> <td class="numLineCover"> 380</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.acl = acl;</pre></td></tr>
+<tr> <td class="numLineCover"> 381</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> }</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>
@@ -623,17 +623,46 @@
<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"> </pre></td></tr>
<tr> <td class="numLine"> 395</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override </pre></td></tr>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 396</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"> 397</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"> 398</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> equals(Object o) {</pre></td></tr>
+<tr> <td class="numLineCover"> 397</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> same = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 398</td> <td class="nbHitsUncovered"><a title="Line 398: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 398: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (<span class="keyword">null</span> != o && <span class="keyword">this</span>.getClass().equals(o.getClass())) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 399</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> AclItem other = (AclItem) o;</pre></td></tr>
+<tr> <td class="numLineCover"> 400</td> <td class="nbHitsUncovered"><a title="Line 400: Conditional coverage 40% (4/10) [each condition: 50%, 50%, 50%, 50%, 0%]."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 400: 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"> 401</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>
+<tr> <td class="numLine"> 402</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> docIdFragment.equals(other.docIdFragment));</pre></td></tr>
+<tr> <td class="numLine"> 403</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 404</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> same;</pre></td></tr>
+<tr> <td class="numLine"> 405</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 399</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 406</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 407</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 408</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"> 409</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"> 410</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"> 411</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 412</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 413</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override </pre></td></tr>
+<tr> <td class="numLine"> 414</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"> 415</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"> 416</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 417</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 400</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 418</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.ExceptionHandlers.html b/coverage/com.google.enterprise.adaptor.ExceptionHandlers.html
index 6c3b071..3a2c7b8 100644
--- a/coverage/com.google.enterprise.adaptor.ExceptionHandlers.html
+++ b/coverage/com.google.enterprise.adaptor.ExceptionHandlers.html
@@ -121,7 +121,7 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> ExceptionHandler noRetryHandler() {</pre></td></tr>
-<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">return</span> noRetryHandler;</pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">return</span> noRetryHandler;</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>
diff --git a/coverage/com.google.enterprise.adaptor.GroupPrincipal.html b/coverage/com.google.enterprise.adaptor.GroupPrincipal.html
index 02ec136..c2ab0e6 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"> 896</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"> 892</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.GsaCommunicationHandler.html b/coverage/com.google.enterprise.adaptor.GsaCommunicationHandler.html
index 5db2f6a..def05d9 100644
--- a/coverage/com.google.enterprise.adaptor.GsaCommunicationHandler.html
+++ b/coverage/com.google.enterprise.adaptor.GsaCommunicationHandler.html
@@ -12,13 +12,13 @@
<div class="separator"> </div>
<table class="report">
<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">55</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:81px"><span class="text">239/294</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">24</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:76px"><span class="text">78/102</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.86046511627907;</span>3.86</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.86046511627907;</span>3.86</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AdaptorContextImpl</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">31</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:43px"><span class="text">24/55</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">17</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:22px"><span class="text">5/22</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.86046511627907;</span>3.86</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AlreadyRunningRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.86046511627907;</span>3.86</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$BackgroundRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.86046511627907;</span>3.86</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$IncrementalPushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">7/11</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.86046511627907;</span>3.86</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$PushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:87px"><span class="text">7/8</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.86046511627907;</span>3.86</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">55</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:81px"><span class="text">239/294</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">24</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:76px"><span class="text">78/102</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.7954545454545454;</span>3.795</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.7954545454545454;</span>3.795</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AdaptorContextImpl</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">31</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">25/56</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">17</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:22px"><span class="text">5/22</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.7954545454545454;</span>3.795</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AlreadyRunningRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.7954545454545454;</span>3.795</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$BackgroundRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.7954545454545454;</span>3.795</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$IncrementalPushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">7/11</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.7954545454545454;</span>3.795</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$PushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:87px"><span class="text">7/8</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.7954545454545454;</span>3.795</td></tr>
</table>
<div class="separator"> </div>
@@ -105,7 +105,7 @@
<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="comment">/** This class handles the communications with GSA. */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> GsaCommunicationHandler {</pre></td></tr>
+<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> GsaCommunicationHandler {</pre></td></tr>
<tr> <td class="numLineCover"> 43</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"> 44</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = Logger.getLogger(GsaCommunicationHandler.<span class="keyword">class</span>.getName());</pre></td></tr>
@@ -206,1270 +206,1281 @@
<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> DocIdSender docIdSender;</pre></td></tr>
<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> HttpServerScope dashboardScope;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> AsyncDocIdSender asyncDocIdSender;</pre></td></tr>
<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> Dashboard dashboard;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> HttpServerScope dashboardScope;</pre></td></tr>
<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> SensitiveValueCodec secureValueCodec;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> Dashboard dashboard;</pre></td></tr>
<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> KeyPair keyPair;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> SensitiveValueCodec secureValueCodec;</pre></td></tr>
<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> AclTransform aclTransform;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> KeyPair keyPair;</pre></td></tr>
<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> AclTransform aclTransform;</pre></td></tr>
<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Used to stop startup prematurely. When greater than 0, start() should abort</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * immediately because stop() is currently processing. This allows cancelling</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Used to stop startup prematurely. When greater than 0, start() should abort</span></pre></td></tr>
<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * new start() calls before stop() is done processing.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * immediately because stop() is currently processing. This allows cancelling</span></pre></td></tr>
<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * new start() calls before stop() is done processing.</span></pre></td></tr>
+<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 103</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> AtomicInteger shutdownCount = <span class="keyword">new</span> AtomicInteger();</pre></td></tr>
-<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 104</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> AtomicInteger shutdownCount = <span class="keyword">new</span> AtomicInteger();</pre></td></tr>
+<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> ShutdownWaiter waiter;</pre></td></tr>
-<tr> <td class="numLineCover"> 105</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> List<Filter> commonFilters = Arrays.asList(<span class="keyword">new</span> Filter[] {</pre></td></tr>
-<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> AbortImmediatelyFilter(),</pre></td></tr>
+<tr> <td class="numLineCover"> 106</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> List<Filter> commonFilters = Arrays.asList(<span class="keyword">new</span> Filter[] {</pre></td></tr>
<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> LoggingFilter(),</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> AbortImmediatelyFilter(),</pre></td></tr>
<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> InternalErrorFilter(),</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> LoggingFilter(),</pre></td></tr>
<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> });</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> InternalErrorFilter(),</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"> 111</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 111</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> <span class="keyword">public</span> GsaCommunicationHandler(Adaptor adaptor, Config config) {</pre></td></tr>
-<tr> <td class="numLineCover"> 112</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.adaptor = adaptor;</pre></td></tr>
-<tr> <td class="numLineCover"> 113</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.config = config;</pre></td></tr>
-<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 112</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> <span class="keyword">public</span> GsaCommunicationHandler(Adaptor adaptor, Config config) {</pre></td></tr>
+<tr> <td class="numLineCover"> 113</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.adaptor = adaptor;</pre></td></tr>
+<tr> <td class="numLineCover"> 114</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.config = config;</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"> 115</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> journal = <span class="keyword">new</span> Journal(config.isJournalReducedMem());</pre></td></tr>
-<tr> <td class="numLineCover"> 116</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 116</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> journal = <span class="keyword">new</span> Journal(config.isJournalReducedMem());</pre></td></tr>
+<tr> <td class="numLineCover"> 117</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Start services necessary for handling outgoing requests. {@code ""} is used</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * for {@code contextPrefix} if the passed value is {@code null}.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Start services necessary for handling outgoing requests. {@code ""} is used</span></pre></td></tr>
<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * for {@code contextPrefix} if the passed value is {@code null}.</span></pre></td></tr>
<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> AdaptorContext setup(HttpServer server,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> HttpServer dashboardServer, String contextPrefix) <span class="keyword">throws</span> IOException,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> AdaptorContext setup(HttpServer server,</pre></td></tr>
<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> HttpServer dashboardServer, String contextPrefix) <span class="keyword">throws</span> IOException,</pre></td></tr>
+<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> InterruptedException {</pre></td></tr>
-<tr> <td class="numLineCover"> 125</td> <td class="nbHitsUncovered"><a title="Line 125: Conditional coverage 50% (1/2)."> 16</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 125: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (<span class="keyword">this</span>.scope != <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 126</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 listening"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 127</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 126</td> <td class="nbHitsUncovered"><a title="Line 126: Conditional coverage 50% (1/2)."> 16</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 126: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (<span class="keyword">this</span>.scope != <span class="keyword">null</span>) {</a></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">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Already listening"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 128</td> <td class="nbHitsUncovered"><a title="Line 128: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 16</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 128: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (server == <span class="keyword">null</span> || dashboardServer == <span class="keyword">null</span>) {</a></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 class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</span></pre></td></tr>
-<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 129</td> <td class="nbHitsUncovered"><a title="Line 129: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 16</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 129: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (server == <span class="keyword">null</span> || dashboardServer == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 130</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</span></pre></td></tr>
+<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 131</td> <td class="nbHitsCovered"><a title="Line 131: Conditional coverage 100% (2/2)."> 16</a></td> <td class="src"><pre class="src"> <a title="Line 131: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (contextPrefix == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 132</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> contextPrefix = <span class="string">""</span>;</pre></td></tr>
-<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 132</td> <td class="nbHitsCovered"><a title="Line 132: Conditional coverage 100% (2/2)."> 16</a></td> <td class="src"><pre class="src"> <a title="Line 132: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (contextPrefix == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 133</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> contextPrefix = <span class="string">""</span>;</pre></td></tr>
+<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 134</td> <td class="nbHitsUncovered"><a title="Line 134: Conditional coverage 50% (1/2)."> 16</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 134: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (server <span class="keyword">instanceof</span> HttpsServer</a></span></pre></td></tr>
-<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 135</td> <td class="nbHitsUncovered"><a title="Line 135: Conditional coverage 50% (1/2)."> 16</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 135: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (server <span class="keyword">instanceof</span> HttpsServer</a></span></pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> != dashboardServer <span class="keyword">instanceof</span> HttpsServer) {</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">throw</span> <span class="keyword">new</span> IllegalArgumentException(</span></pre></td></tr>
-<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"Both servers must be HttpServers or both HttpsServers"</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 class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(</span></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"> <span class="string">"Both servers must be HttpServers or both HttpsServers"</span>);</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="numLineCover"> 140</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> secure = server <span class="keyword">instanceof</span> HttpsServer;</pre></td></tr>
-<tr> <td class="numLineCover"> 141</td> <td class="nbHitsUncovered"><a title="Line 141: Conditional coverage 50% (1/2)."> 16</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 141: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (secure != config.isServerSecure()) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 142</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.setValue(<span class="string">"server.secure"</span>, <span class="string">""</span> + secure);</span></pre></td></tr>
-<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 144</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> keyPair = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 141</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> secure = server <span class="keyword">instanceof</span> HttpsServer;</pre></td></tr>
+<tr> <td class="numLineCover"> 142</td> <td class="nbHitsUncovered"><a title="Line 142: Conditional coverage 50% (1/2)."> 16</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 142: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (secure != config.isServerSecure()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 143</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.setValue(<span class="string">"server.secure"</span>, <span class="string">""</span> + secure);</span></pre></td></tr>
+<tr> <td class="numLine"> 144</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 145</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> keyPair = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 146</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> keyPair = getKeyPair(config.getServerKeyAlias());</pre></td></tr>
-<tr> <td class="numLineCover"> 147</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ex) {</span></pre></td></tr>
-<tr> <td class="numLine"> 148</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 147</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> keyPair = getKeyPair(config.getServerKeyAlias());</pre></td></tr>
+<tr> <td class="numLineCover"> 148</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ex) {</span></pre></td></tr>
+<tr> <td class="numLine"> 149</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// The exception is only fatal if we are in secure mode.</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">if</span> (secure) {</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"> <span class="keyword">throw</span> ex;</span></pre></td></tr>
-<tr> <td class="numLine"> 151</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 150</td> <td class="nbHitsUncovered"><a title="Line 150: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 150: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (secure) {</a></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="numLine"> 152</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</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> (RuntimeException ex) {</span></pre></td></tr>
-<tr> <td class="numLine"> 153</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 153</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (RuntimeException ex) {</span></pre></td></tr>
+<tr> <td class="numLine"> 154</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// The exception is only fatal if we are in secure mode.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 154</td> <td class="nbHitsUncovered"><a title="Line 154: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 154: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (secure) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 155</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="numLine"> 156</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 155</td> <td class="nbHitsUncovered"><a title="Line 155: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 155: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (secure) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 156</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="numLine"> 157</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 157</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 158</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> secureValueCodec = <span class="keyword">new</span> SensitiveValueCodec(keyPair);</pre></td></tr>
-<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 158</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 159</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> secureValueCodec = <span class="keyword">new</span> SensitiveValueCodec(keyPair);</pre></td></tr>
+<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 160</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">int</span> port = server.getAddress().getPort();</pre></td></tr>
-<tr> <td class="numLineCover"> 161</td> <td class="nbHitsCovered"><a title="Line 161: Conditional coverage 100% (2/2)."> 16</a></td> <td class="src"><pre class="src"> <a title="Line 161: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (port != config.getServerPort()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 162</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> config.setValue(<span class="string">"server.port"</span>, <span class="string">""</span> + port);</pre></td></tr>
-<tr> <td class="numLine"> 163</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 161</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">int</span> port = server.getAddress().getPort();</pre></td></tr>
+<tr> <td class="numLineCover"> 162</td> <td class="nbHitsCovered"><a title="Line 162: Conditional coverage 100% (2/2)."> 16</a></td> <td class="src"><pre class="src"> <a title="Line 162: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (port != config.getServerPort()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 163</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> config.setValue(<span class="string">"server.port"</span>, <span class="string">""</span> + port);</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"> 164</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">int</span> dashboardPort = dashboardServer.getAddress().getPort();</pre></td></tr>
-<tr> <td class="numLineCover"> 165</td> <td class="nbHitsCovered"><a title="Line 165: Conditional coverage 100% (2/2)."> 16</a></td> <td class="src"><pre class="src"> <a title="Line 165: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (dashboardPort != config.getServerDashboardPort()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 166</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> config.setValue(<span class="string">"server.dashboardPort"</span>, <span class="string">""</span> + dashboardPort);</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"> 165</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">int</span> dashboardPort = dashboardServer.getAddress().getPort();</pre></td></tr>
+<tr> <td class="numLineCover"> 166</td> <td class="nbHitsCovered"><a title="Line 166: Conditional coverage 100% (2/2)."> 16</a></td> <td class="src"><pre class="src"> <a title="Line 166: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (dashboardPort != config.getServerDashboardPort()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 167</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> config.setValue(<span class="string">"server.dashboardPort"</span>, <span class="string">""</span> + dashboardPort);</pre></td></tr>
<tr> <td class="numLine"> 168</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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="numLineCover"> 169</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> scope = <span class="keyword">new</span> HttpServerScope(server, contextPrefix);</pre></td></tr>
-<tr> <td class="numLineCover"> 170</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> waiter = <span class="keyword">new</span> ShutdownWaiter();</pre></td></tr>
-<tr> <td class="numLine"> 171</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 170</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> scope = <span class="keyword">new</span> HttpServerScope(server, contextPrefix);</pre></td></tr>
+<tr> <td class="numLineCover"> 171</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> waiter = <span class="keyword">new</span> ShutdownWaiter();</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="numLineCover"> 172</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> sessionManager = <span class="keyword">new</span> SessionManager<HttpExchange>(</pre></td></tr>
-<tr> <td class="numLine"> 173</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> SessionManager.HttpExchangeClientStore(<span class="string">"sessid_"</span> + port, secure),</pre></td></tr>
+<tr> <td class="numLineCover"> 173</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> sessionManager = <span class="keyword">new</span> SessionManager<HttpExchange>(</pre></td></tr>
<tr> <td class="numLine"> 174</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> 30 * 60 * 1000 <span class="comment">/* session lifetime: 30 minutes */</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> SessionManager.HttpExchangeClientStore(<span class="string">"sessid_"</span> + port, secure),</pre></td></tr>
<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> 5 * 60 * 1000 <span class="comment">/* max cleanup frequency: 5 minutes */</span>);</pre></td></tr>
+ <td class="src"><pre class="src"> 30 * 60 * 1000 <span class="comment">/* session lifetime: 30 minutes */</span>,</pre></td></tr>
<tr> <td class="numLine"> 176</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> 5 * 60 * 1000 <span class="comment">/* max cleanup frequency: 5 minutes */</span>);</pre></td></tr>
+<tr> <td class="numLine"> 177</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 177</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> URI baseUri = config.getServerBaseUri();</pre></td></tr>
-<tr> <td class="numLine"> 178</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> URI docUri;</pre></td></tr>
+<tr> <td class="numLineCover"> 178</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> URI baseUri = config.getServerBaseUri();</pre></td></tr>
<tr> <td class="numLine"> 179</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> URI docUri;</pre></td></tr>
+<tr> <td class="numLine"> 180</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 180</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> docUri = <span class="keyword">new</span> URI(<span class="keyword">null</span>, <span class="keyword">null</span>, contextPrefix + config.getServerDocIdPath(),</pre></td></tr>
-<tr> <td class="numLine"> 181</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 181</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> docUri = <span class="keyword">new</span> URI(<span class="keyword">null</span>, <span class="keyword">null</span>, contextPrefix + config.getServerDocIdPath(),</pre></td></tr>
+<tr> <td class="numLine"> 182</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">null</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 182</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (URISyntaxException ex) {</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">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"Invalid prefix or docIdPath"</span>, ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 184</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 185</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> docIdCodec = <span class="keyword">new</span> DocIdCodec(baseUri.resolve(docUri), config.isDocIdUrl());</pre></td></tr>
-<tr> <td class="numLineCover"> 186</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> GsaFeedFileSender fileSender = <span class="keyword">new</span> GsaFeedFileSender(</pre></td></tr>
-<tr> <td class="numLine"> 187</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.getGsaHostname(), config.isServerSecure(), <span class="comment">// use secure bool?</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">catch</span> (URISyntaxException ex) {</span></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">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"Invalid prefix or docIdPath"</span>, ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 185</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 186</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> docIdCodec = <span class="keyword">new</span> DocIdCodec(baseUri.resolve(docUri), config.isDocIdUrl());</pre></td></tr>
+<tr> <td class="numLineCover"> 187</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> GsaFeedFileSender fileSender = <span class="keyword">new</span> GsaFeedFileSender(</pre></td></tr>
<tr> <td class="numLine"> 188</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.getGsaHostname(), config.isServerSecure(), <span class="comment">// use secure bool?</span></pre></td></tr>
+<tr> <td class="numLine"> 189</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> config.getGsaCharacterEncoding());</pre></td></tr>
-<tr> <td class="numLineCover"> 189</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> aclTransform = createAclTransform();</pre></td></tr>
-<tr> <td class="numLineCover"> 190</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> GsaFeedFileMaker fileMaker = <span class="keyword">new</span> GsaFeedFileMaker(docIdCodec, aclTransform,</pre></td></tr>
-<tr> <td class="numLine"> 191</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.isGsa614FeedWorkaroundEnabled(),</pre></td></tr>
+<tr> <td class="numLineCover"> 190</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> aclTransform = createAclTransform();</pre></td></tr>
+<tr> <td class="numLineCover"> 191</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> GsaFeedFileMaker fileMaker = <span class="keyword">new</span> GsaFeedFileMaker(docIdCodec, aclTransform,</pre></td></tr>
<tr> <td class="numLine"> 192</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.isGsa614FeedWorkaroundEnabled(),</pre></td></tr>
+<tr> <td class="numLine"> 193</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> config.isGsa70AuthMethodWorkaroundEnabled());</pre></td></tr>
-<tr> <td class="numLineCover"> 193</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> docIdSender</pre></td></tr>
-<tr> <td class="numLine"> 194</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> = <span class="keyword">new</span> DocIdSender(fileMaker, fileSender, journal, config, adaptor);</pre></td></tr>
+<tr> <td class="numLineCover"> 194</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> docIdSender</pre></td></tr>
<tr> <td class="numLine"> 195</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 196</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Could be done during start(), but then we would have to save</span></pre></td></tr>
+ <td class="src"><pre class="src"> = <span class="keyword">new</span> DocIdSender(fileMaker, fileSender, journal, config, adaptor);</pre></td></tr>
+<tr> <td class="numLineCover"> 196</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> asyncDocIdSender = <span class="keyword">new</span> AsyncDocIdSender(docIdSender,</pre></td></tr>
<tr> <td class="numLine"> 197</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// dashboardServer and contextPrefix.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 198</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> dashboardScope = <span class="keyword">new</span> HttpServerScope(dashboardServer, contextPrefix);</pre></td></tr>
-<tr> <td class="numLine"> 199</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 200</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// We are about to start the Adaptor, so anything available through</span></pre></td></tr>
-<tr> <td class="numLine"> 201</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// AdaptorContext or other means must be initialized at this point. Any</span></pre></td></tr>
-<tr> <td class="numLine"> 202</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// reference to 'adaptor' before this point must be done very carefully to</span></pre></td></tr>
-<tr> <td class="numLine"> 203</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// ensure it doesn't call the adaptor until after Adaptor.init() completes.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 204</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">return</span> adaptorContext = <span class="keyword">new</span> AdaptorContextImpl();</pre></td></tr>
-<tr> <td class="numLine"> 205</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 206</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 208</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Start servicing incoming requests. This makes use of the</span></pre></td></tr>
-<tr> <td class="numLine"> 209</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * previously-provided HttpServers and configuration.</span></pre></td></tr>
-<tr> <td class="numLine"> 210</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 211</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() {</pre></td></tr>
-<tr> <td class="numLine"> 212</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Since the Adaptor has been started, we can now issue other calls to it.</span></pre></td></tr>
-<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Usages of 'adaptor' are completely safe after this point.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 214</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> adaptorContext.freeze();</pre></td></tr>
-<tr> <td class="numLine"> 215</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 216</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Since we are white-listing particular keys for auto-update, things aren't</span></pre></td></tr>
-<tr> <td class="numLine"> 217</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// ready enough to expose to adaptors.</span></pre></td></tr>
-<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/*if (adaptor instanceof ConfigModificationListener) {</span></pre></td></tr>
-<tr> <td class="numLine"> 219</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> config.addConfigModificationListener(</span></pre></td></tr>
-<tr> <td class="numLine"> 220</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> (ConfigModificationListener) adaptor);</span></pre></td></tr>
-<tr> <td class="numLine"> 221</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> }*/</span></pre></td></tr>
-<tr> <td class="numLine"> 222</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 223</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> SamlServiceProvider samlServiceProvider = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 224</td> <td class="nbHitsCovered"><a title="Line 224: Conditional coverage 100% (2/2)."> 15</a></td> <td class="src"><pre class="src"> <a title="Line 224: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (config.isServerSecure()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 225</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> bootstrapOpenSaml();</pre></td></tr>
-<tr> <td class="numLineCover"> 226</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> SamlMetadata metadata = <span class="keyword">new</span> SamlMetadata(config.getServerHostname(),</pre></td></tr>
-<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.getServerPort(), config.getGsaHostname(),</pre></td></tr>
-<tr> <td class="numLine"> 228</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.getGsaSamlEntityId(), config.getServerSamlEntityId());</pre></td></tr>
-<tr> <td class="numLine"> 229</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 230</td> <td class="nbHitsUncovered"><a title="Line 230: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 230: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (adaptorContext.authnAuthority != <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 231</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.config(<span class="string">"Adaptor-based authentication supported"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 232</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> SamlIdentityProvider samlIdentityProvider = <span class="keyword">new</span> SamlIdentityProvider(</span></pre></td></tr>
-<tr> <td class="numLine"> 233</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> adaptorContext.authnAuthority, metadata, keyPair);</pre></td></tr>
-<tr> <td class="numLineCover"> 234</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> addFilters(scope.createContext(<span class="string">"/samlip"</span>,</span></pre></td></tr>
-<tr> <td class="numLine"> 235</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> samlIdentityProvider.getSingleSignOnHandler()));</pre></td></tr>
-<tr> <td class="numLineCover"> 236</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">else</span> {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 237</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.config(<span class="string">"Adaptor-based authentication not supported"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 238</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 239</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> samlServiceProvider</pre></td></tr>
-<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> = <span class="keyword">new</span> SamlServiceProvider(sessionManager, metadata, keyPair);</pre></td></tr>
-<tr> <td class="numLineCover"> 241</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> addFilters(scope.createContext(<span class="string">"/samlassertionconsumer"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 242</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> samlServiceProvider.getAssertionConsumer()));</pre></td></tr>
-<tr> <td class="numLineCover"> 243</td> <td class="nbHitsUncovered"><a title="Line 243: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 243: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (adaptorContext.authzAuthority != <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 244</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.config(<span class="string">"Adaptor-based authorization supported"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 245</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> addFilters(scope.createContext(<span class="string">"/saml-authz"</span>, <span class="keyword">new</span> SamlBatchAuthzHandler(</span></pre></td></tr>
-<tr> <td class="numLine"> 246</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> adaptorContext.authzAuthority, docIdCodec, metadata)));</pre></td></tr>
-<tr> <td class="numLine"> 247</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 248</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.config(<span class="string">"Adaptor-based authorization not supported"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 249</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 250</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 251</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> scheduleExecutor = Executors.newSingleThreadScheduledExecutor(</pre></td></tr>
-<tr> <td class="numLine"> 252</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> ThreadFactoryBuilder().setDaemon(<span class="keyword">true</span>).setNameFormat(<span class="string">"schedule"</span>)</pre></td></tr>
-<tr> <td class="numLine"> 253</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> .build());</pre></td></tr>
-<tr> <td class="numLineCover"> 254</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> Watchdog watchdog = <span class="keyword">new</span> Watchdog(scheduleExecutor);</pre></td></tr>
-<tr> <td class="numLineCover"> 255</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> AsyncDocIdSender asyncDocIdSender = <span class="keyword">new</span> AsyncDocIdSender(docIdSender,</pre></td></tr>
-<tr> <td class="numLine"> 256</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> config.getFeedMaxUrls() <span class="comment">/* batch size */</span>,</pre></td></tr>
-<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 198</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> 5 <span class="comment">/* max latency */</span>, TimeUnit.MINUTES,</pre></td></tr>
-<tr> <td class="numLine"> 258</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 199</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> 2 * config.getFeedMaxUrls() <span class="comment">/* queue size */</span>);</pre></td></tr>
-<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 200</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 260</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// The cachedThreadPool implementation created here is considerably better</span></pre></td></tr>
-<tr> <td class="numLine"> 261</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// than using ThreadPoolExecutor. ThreadPoolExecutor does not create threads</span></pre></td></tr>
-<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// as would be expected from a thread pool.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 263</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> backgroundExecutor = Executors.newCachedThreadPool(</pre></td></tr>
-<tr> <td class="numLine"> 264</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> ThreadFactoryBuilder().setDaemon(<span class="keyword">true</span>).setNameFormat(<span class="string">"background"</span>)</pre></td></tr>
-<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> .build());</pre></td></tr>
-<tr> <td class="numLineCover"> 266</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> backgroundExecutor.execute(waiter.runnable(asyncDocIdSender.worker()));</pre></td></tr>
-<tr> <td class="numLineCover"> 267</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> DocumentHandler docHandler = <span class="keyword">new</span> DocumentHandler(</pre></td></tr>
-<tr> <td class="numLine"> 268</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> docIdCodec, docIdCodec, journal, adaptor, adaptorContext.authzAuthority,</pre></td></tr>
-<tr> <td class="numLine"> 269</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.getGsaHostname(),</pre></td></tr>
-<tr> <td class="numLine"> 270</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.getServerFullAccessHosts(),</pre></td></tr>
-<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> samlServiceProvider, createTransformPipeline(), aclTransform,</pre></td></tr>
-<tr> <td class="numLine"> 272</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.isServerToUseCompression(), watchdog,</pre></td></tr>
-<tr> <td class="numLine"> 273</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> asyncDocIdSender, </pre></td></tr>
-<tr> <td class="numLine"> 274</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.doesGsaAcceptDocControlsHeader(),</pre></td></tr>
-<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.getAdaptorDocHeaderTimeoutMillis(),</pre></td></tr>
-<tr> <td class="numLine"> 276</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.getAdaptorDocContentTimeoutMillis(),</pre></td></tr>
-<tr> <td class="numLine"> 277</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.getScoringType());</pre></td></tr>
-<tr> <td class="numLineCover"> 278</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> String handlerPath = config.getServerBaseUri().getPath()</pre></td></tr>
-<tr> <td class="numLine"> 279</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + config.getServerDocIdPath();</pre></td></tr>
-<tr> <td class="numLineCover"> 280</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> addFilters(scope.createContext(handlerPath, docHandler));</pre></td></tr>
-<tr> <td class="numLine"> 281</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 201</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Could be done during start(), but then we would have to save</span></pre></td></tr>
+<tr> <td class="numLine"> 202</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// dashboardServer and contextPrefix.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 203</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> dashboardScope = <span class="keyword">new</span> HttpServerScope(dashboardServer, contextPrefix);</pre></td></tr>
+<tr> <td class="numLine"> 204</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 282</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Start communicating with other services. As a general rule, by this time</span></pre></td></tr>
-<tr> <td class="numLine"> 283</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// we want all services we provide to be up and running. However, note that</span></pre></td></tr>
-<tr> <td class="numLine"> 284</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// the adaptor may have started sending feeds as soon as we called init(),</span></pre></td></tr>
-<tr> <td class="numLine"> 285</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// and that is "okay." In addition, the HttpServer we were provided may not</span></pre></td></tr>
-<tr> <td class="numLine"> 286</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// have been started yet.</span></pre></td></tr>
-<tr> <td class="numLine"> 287</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 288</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> scheduler = <span class="keyword">new</span> CronScheduler(scheduleExecutor);</pre></td></tr>
-<tr> <td class="numLineCover"> 289</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> docIdFullPusher = <span class="keyword">new</span> OneAtATimeRunnable(</pre></td></tr>
-<tr> <td class="numLine"> 290</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> PushRunnable(adaptorContext.fullExceptionHandler),</pre></td></tr>
-<tr> <td class="numLine"> 291</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> AlreadyRunningRunnable());</pre></td></tr>
-<tr> <td class="numLineCover"> 292</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> sendDocIdsFuture = scheduler.schedule(</pre></td></tr>
-<tr> <td class="numLine"> 293</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.getAdaptorFullListingSchedule(),</pre></td></tr>
-<tr> <td class="numLine"> 294</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> waiter.runnable(<span class="keyword">new</span> BackgroundRunnable(docIdFullPusher)));</pre></td></tr>
-<tr> <td class="numLineCover"> 295</td> <td class="nbHitsCovered"><a title="Line 295: Conditional coverage 100% (2/2)."> 15</a></td> <td class="src"><pre class="src"> <a title="Line 295: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (config.isAdaptorPushDocIdsOnStartup()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 296</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> log.info(<span class="string">"Pushing once at program start"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 297</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> checkAndScheduleImmediatePushOfDocIds();</pre></td></tr>
-<tr> <td class="numLine"> 298</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 299</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 300</td> <td class="nbHitsCovered"><a title="Line 300: Conditional coverage 100% (2/2)."> 15</a></td> <td class="src"><pre class="src"> <a title="Line 300: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (adaptorContext.pollingIncrementalLister != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 301</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> docIdIncrementalPusher = <span class="keyword">new</span> OneAtATimeRunnable(</pre></td></tr>
-<tr> <td class="numLine"> 302</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> IncrementalPushRunnable(adaptorContext.pollingIncrementalLister,</pre></td></tr>
-<tr> <td class="numLine"> 303</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> adaptorContext.incrExceptionHandler),</pre></td></tr>
-<tr> <td class="numLine"> 304</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> AlreadyRunningRunnable());</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"> 306</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> scheduleExecutor.scheduleAtFixedRate(</pre></td></tr>
-<tr> <td class="numLine"> 307</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> waiter.runnable(<span class="keyword">new</span> BackgroundRunnable(docIdIncrementalPusher)),</pre></td></tr>
-<tr> <td class="numLine"> 308</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> 0,</pre></td></tr>
-<tr> <td class="numLine"> 309</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.getAdaptorIncrementalPollPeriodMillis(),</pre></td></tr>
-<tr> <td class="numLine"> 310</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> TimeUnit.MILLISECONDS);</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"> </pre></td></tr>
-<tr> <td class="numLineCover"> 313</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> dashboard = <span class="keyword">new</span> Dashboard(config, <span class="keyword">this</span>, journal, sessionManager,</pre></td></tr>
-<tr> <td class="numLine"> 314</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> secureValueCodec, adaptor, adaptorContext.statusSources);</pre></td></tr>
-<tr> <td class="numLineCover"> 315</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> dashboard.start(dashboardScope);</pre></td></tr>
-<tr> <td class="numLineCover"> 316</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">void</span> tryToPutVersionIntoConfig() <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLine"> 319</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 320</td> <td class="nbHitsUncovered"><a title="Line 320: Conditional coverage 50% (1/2)."> 11</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 320: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (<span class="string">"GENERATE"</span>.equals(config.getGsaVersion())) { <span class="comment">// is not set</span></a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 321</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> GsaVersion ver = GsaVersion.get(config.getGsaHostname(),</span></pre></td></tr>
-<tr> <td class="numLine"> 322</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.isServerSecure());</pre></td></tr>
-<tr> <td class="numLineCover"> 323</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.overrideKey(<span class="string">"gsa.version"</span>, <span class="string">""</span> + ver);</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="numLineCover"> 325</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (FileNotFoundException fne) {</span></pre></td></tr>
-<tr> <td class="numLine"> 326</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// we're talking to an older GSA that cannot tell us its version.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 327</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.FINE, <span class="string">"gsa didn't provide version"</span>, fne);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 328</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.setValue(<span class="string">"gsa.version"</span>, <span class="string">"7.0.14-114"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 329</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IllegalArgumentException iae) {</span></pre></td></tr>
-<tr> <td class="numLine"> 330</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// we're talking to a GSA whose version we don't understand </span></pre></td></tr>
-<tr> <td class="numLineCover"> 331</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.FINE, <span class="string">"gsa provided incomprehensible version"</span>, iae);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 332</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.setValue(<span class="string">"gsa.version"</span>, <span class="string">"7.0.14-114"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 333</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> } <span class="comment">// other IOException propagates out</span></pre></td></tr>
-<tr> <td class="numLineCover"> 334</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 335</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 336</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> TransformPipeline createTransformPipeline() {</pre></td></tr>
-<tr> <td class="numLineCover"> 337</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> <span class="keyword">return</span> createTransformPipeline(config.getTransformPipelineSpec());</pre></td></tr>
-<tr> <td class="numLine"> 338</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 205</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// We are about to start the Adaptor, so anything available through</span></pre></td></tr>
+<tr> <td class="numLine"> 206</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// AdaptorContext or other means must be initialized at this point. Any</span></pre></td></tr>
+<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// reference to 'adaptor' before this point must be done very carefully to</span></pre></td></tr>
+<tr> <td class="numLine"> 208</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// ensure it doesn't call the adaptor until after Adaptor.init() completes.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 209</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">return</span> adaptorContext = <span class="keyword">new</span> AdaptorContextImpl();</pre></td></tr>
+<tr> <td class="numLine"> 210</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 339</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 211</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"> @VisibleForTesting</pre></td></tr>
-<tr> <td class="numLine"> 341</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">static</span> TransformPipeline createTransformPipeline(</pre></td></tr>
-<tr> <td class="numLine"> 342</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> List<Map<String, String>> pipelineConfig) {</pre></td></tr>
-<tr> <td class="numLineCover"> 343</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> List<DocumentTransform> elements = <span class="keyword">new</span> LinkedList<DocumentTransform>();</pre></td></tr>
-<tr> <td class="numLineCover"> 344</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> List<String> names = <span class="keyword">new</span> LinkedList<String>();</pre></td></tr>
-<tr> <td class="numLineCover"> 345</td> <td class="nbHitsCovered"><a title="Line 345: Conditional coverage 100% (2/2)."> 23</a></td> <td class="src"><pre class="src"> <a title="Line 345: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map<String, String> element : pipelineConfig) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 346</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String name = element.get(<span class="string">"name"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 347</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String confPrefix = <span class="string">"transform.pipeline."</span> + name + <span class="string">"."</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 348</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> String factoryMethodName = element.get(<span class="string">"factoryMethod"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 349</td> <td class="nbHitsCovered"><a title="Line 349: Conditional coverage 100% (2/2)."> 7</a></td> <td class="src"><pre class="src"> <a title="Line 349: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (factoryMethodName == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 350</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(</pre></td></tr>
-<tr> <td class="numLine"> 351</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"Missing "</span> + confPrefix + <span class="string">"factoryMethod configuration setting"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 352</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 353</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">int</span> sepIndex = factoryMethodName.lastIndexOf(<span class="string">"."</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 354</td> <td class="nbHitsCovered"><a title="Line 354: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 354: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (sepIndex == -1) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 355</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"Could not separate method name from class "</span></pre></td></tr>
-<tr> <td class="numLine"> 356</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">"name"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 357</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 358</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> String className = factoryMethodName.substring(0, sepIndex);</pre></td></tr>
-<tr> <td class="numLineCover"> 359</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> String methodName = factoryMethodName.substring(sepIndex + 1);</pre></td></tr>
-<tr> <td class="numLineCover"> 360</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Split {0} into class {1} and method {2}"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 361</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {factoryMethodName, className, methodName});</pre></td></tr>
-<tr> <td class="numLine"> 362</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Class<?> klass;</pre></td></tr>
-<tr> <td class="numLine"> 363</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 364</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> klass = Class.forName(className);</pre></td></tr>
-<tr> <td class="numLineCover"> 365</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (ClassNotFoundException ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 366</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(</pre></td></tr>
-<tr> <td class="numLine"> 367</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"Could not load class for transform "</span> + name, ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 368</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 369</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Method method;</pre></td></tr>
-<tr> <td class="numLine"> 370</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 371</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> method = klass.getDeclaredMethod(methodName, Map.<span class="keyword">class</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 372</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (NoSuchMethodException ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 373</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"Could not find method "</span> + methodName</pre></td></tr>
-<tr> <td class="numLine"> 374</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">" on class "</span> + className, ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 375</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 376</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Found method {0}"</span>, <span class="keyword">new</span> Object[] {method});</pre></td></tr>
-<tr> <td class="numLine"> 377</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Object o;</pre></td></tr>
-<tr> <td class="numLine"> 378</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 379</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> o = method.invoke(<span class="keyword">null</span>, Collections.unmodifiableMap(element));</pre></td></tr>
-<tr> <td class="numLineCover"> 380</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (Exception ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 381</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"Failure while running factory method "</span></pre></td></tr>
-<tr> <td class="numLine"> 382</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + factoryMethodName, ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 383</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 384</td> <td class="nbHitsCovered"><a title="Line 384: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 384: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!(o <span class="keyword">instanceof</span> DocumentTransform)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 385</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> ClassCastException(o.getClass().getName()</pre></td></tr>
-<tr> <td class="numLine"> 386</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">" is not an instance of DocumentTransform"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 387</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 388</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> DocumentTransform transform = (DocumentTransform) o;</pre></td></tr>
-<tr> <td class="numLineCover"> 389</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> elements.add(transform);</pre></td></tr>
-<tr> <td class="numLineCover"> 390</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> names.add(name);</pre></td></tr>
-<tr> <td class="numLineCover"> 391</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 392</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// If we created an empty pipeline, then we don't need the pipeline at all.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 393</td> <td class="nbHitsCovered"><a title="Line 393: Conditional coverage 100% (2/2)."> 17</a></td> <td class="src"><pre class="src"> <a title="Line 393: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> elements.size() > 0 ? <span class="keyword">new</span> TransformPipeline(elements, names) : <span class="keyword">null</span>;</a></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>
+<tr> <td class="numLine"> 212</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Start servicing incoming requests. This makes use of the</span></pre></td></tr>
+<tr> <td class="numLine"> 214</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * previously-provided HttpServers and configuration.</span></pre></td></tr>
+<tr> <td class="numLine"> 215</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 216</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="keyword">void</span> start() {</pre></td></tr>
+<tr> <td class="numLine"> 217</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Since the Adaptor has been started, we can now issue other calls to it.</span></pre></td></tr>
+<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Usages of 'adaptor' are completely safe after this point.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 219</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> adaptorContext.freeze();</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="numLine"> 396</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> AclTransform createAclTransform() {</pre></td></tr>
-<tr> <td class="numLineCover"> 397</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">return</span> createAclTransform(config.getValuesWithPrefix(<span class="string">"transform.acl."</span>));</pre></td></tr>
-<tr> <td class="numLine"> 398</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 399</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 221</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Since we are white-listing particular keys for auto-update, things aren't</span></pre></td></tr>
+<tr> <td class="numLine"> 222</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// ready enough to expose to adaptors.</span></pre></td></tr>
+<tr> <td class="numLine"> 223</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/*if (adaptor instanceof ConfigModificationListener) {</span></pre></td></tr>
+<tr> <td class="numLine"> 224</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> config.addConfigModificationListener(</span></pre></td></tr>
+<tr> <td class="numLine"> 225</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> (ConfigModificationListener) adaptor);</span></pre></td></tr>
+<tr> <td class="numLine"> 226</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> }*/</span></pre></td></tr>
+<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 400</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @VisibleForTesting</pre></td></tr>
-<tr> <td class="numLine"> 401</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">static</span> AclTransform createAclTransform(Map<String, String> aclConfigRaw) {</pre></td></tr>
-<tr> <td class="numLineCover"> 402</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> Map<Integer, String> aclConfig = <span class="keyword">new</span> TreeMap<Integer, String>();</pre></td></tr>
-<tr> <td class="numLineCover"> 403</td> <td class="nbHitsCovered"><a title="Line 403: Conditional coverage 100% (2/2)."> 18</a></td> <td class="src"><pre class="src"> <a title="Line 403: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map.Entry<String, String> me : aclConfigRaw.entrySet()) {</a></pre></td></tr>
-<tr> <td class="numLine"> 404</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 405</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> aclConfig.put(Integer.parseInt(me.getKey()), me.getValue());</pre></td></tr>
-<tr> <td class="numLineCover"> 406</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (NumberFormatException ex) {</pre></td></tr>
-<tr> <td class="numLine"> 407</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Don't insert into map.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 408</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Ignorning transform.acl.{0} because {0} is not an "</span></pre></td></tr>
-<tr> <td class="numLine"> 409</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">"integer"</span>, me.getKey());</pre></td></tr>
-<tr> <td class="numLineCover"> 410</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 411</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 412</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 228</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> SamlServiceProvider samlServiceProvider = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 229</td> <td class="nbHitsCovered"><a title="Line 229: Conditional coverage 100% (2/2)."> 15</a></td> <td class="src"><pre class="src"> <a title="Line 229: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (config.isServerSecure()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 230</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> bootstrapOpenSaml();</pre></td></tr>
+<tr> <td class="numLineCover"> 231</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> SamlMetadata metadata = <span class="keyword">new</span> SamlMetadata(config.getServerHostname(),</pre></td></tr>
+<tr> <td class="numLine"> 232</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.getServerPort(), config.getGsaHostname(),</pre></td></tr>
+<tr> <td class="numLine"> 233</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.getGsaSamlEntityId(), config.getServerSamlEntityId());</pre></td></tr>
+<tr> <td class="numLine"> 234</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 413</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> List<AclTransform.Rule> rules = <span class="keyword">new</span> LinkedList<AclTransform.Rule>();</pre></td></tr>
-<tr> <td class="numLineCover"> 414</td> <td class="nbHitsCovered"><a title="Line 414: Conditional coverage 100% (2/2)."> 18</a></td> <td class="src"><pre class="src"> <a title="Line 414: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String value : aclConfig.values()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 415</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> String[] parts = value.split(<span class="string">";"</span>, 2);</pre></td></tr>
-<tr> <td class="numLineCover"> 416</td> <td class="nbHitsCovered"><a title="Line 416: Conditional coverage 100% (2/2)."> 8</a></td> <td class="src"><pre class="src"> <a title="Line 416: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (parts.length != 2) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 417</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Could not find semicolon in acl transform: {0}"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 418</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> value);</pre></td></tr>
-<tr> <td class="numLineCover"> 419</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
-<tr> <td class="numLine"> 420</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 235</td> <td class="nbHitsUncovered"><a title="Line 235: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 235: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (adaptorContext.authnAuthority != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 236</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.config(<span class="string">"Adaptor-based authentication supported"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 237</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> SamlIdentityProvider samlIdentityProvider = <span class="keyword">new</span> SamlIdentityProvider(</span></pre></td></tr>
+<tr> <td class="numLine"> 238</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> adaptorContext.authnAuthority, metadata, keyPair);</pre></td></tr>
+<tr> <td class="numLineCover"> 239</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> addFilters(scope.createContext(<span class="string">"/samlip"</span>,</span></pre></td></tr>
+<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> samlIdentityProvider.getSingleSignOnHandler()));</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">else</span> {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 242</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.config(<span class="string">"Adaptor-based authentication not supported"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 421</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> AclTransform.MatchData search = parseAclTransformMatchData(parts[0]);</pre></td></tr>
-<tr> <td class="numLineCover"> 422</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> AclTransform.MatchData replace = parseAclTransformMatchData(parts[1]);</pre></td></tr>
-<tr> <td class="numLineCover"> 423</td> <td class="nbHitsUncovered"><a title="Line 423: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> 7</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 423: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (search == <span class="keyword">null</span> || replace == <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 424</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> log.log(Level.WARNING,</pre></td></tr>
-<tr> <td class="numLine"> 425</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"Could not parse acl transform rule: {0}"</span>, value);</pre></td></tr>
-<tr> <td class="numLineCover"> 426</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
-<tr> <td class="numLine"> 427</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 428</td> <td class="nbHitsCovered"><a title="Line 428: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 428: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (replace.isGroup != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 429</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING,</pre></td></tr>
-<tr> <td class="numLine"> 430</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"Replacement cannot change type. Failed in rule: {0}"</span>, value);</pre></td></tr>
-<tr> <td class="numLineCover"> 431</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</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"> 433</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> rules.add(<span class="keyword">new</span> AclTransform.Rule(search, replace));</pre></td></tr>
-<tr> <td class="numLineCover"> 434</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 435</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> AclTransform(rules);</pre></td></tr>
-<tr> <td class="numLine"> 436</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 437</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 438</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> AclTransform.MatchData parseAclTransformMatchData(String s) {</pre></td></tr>
-<tr> <td class="numLineCover"> 439</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> String[] decls = s.split(<span class="string">","</span>, -1);</pre></td></tr>
-<tr> <td class="numLineCover"> 440</td> <td class="nbHitsCovered"><a title="Line 440: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 14</a></td> <td class="src"><pre class="src"> <a title="Line 440: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (decls.length == 1 && decls[0].trim().equals(<span class="string">""</span>)) {</a></pre></td></tr>
-<tr> <td class="numLine"> 441</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// No declarations are required</span></pre></td></tr>
-<tr> <td class="numLineCover"> 442</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> AclTransform.MatchData(<span class="keyword">null</span>, <span class="keyword">null</span>, <span class="keyword">null</span>, <span class="keyword">null</span>);</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="numLineCover"> 444</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> Boolean isGroup = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 445</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> String name = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 446</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> String domain = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 447</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> String namespace = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 448</td> <td class="nbHitsCovered"><a title="Line 448: Conditional coverage 100% (2/2)."> 25</a></td> <td class="src"><pre class="src"> <a title="Line 448: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String decl : decls) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 449</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> String parts[] = decl.split(<span class="string">"="</span>, 2);</pre></td></tr>
-<tr> <td class="numLineCover"> 450</td> <td class="nbHitsCovered"><a title="Line 450: Conditional coverage 100% (2/2)."> 15</a></td> <td class="src"><pre class="src"> <a title="Line 450: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (parts.length != 2) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 451</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING,</pre></td></tr>
-<tr> <td class="numLine"> 452</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"Could not find \"=\" in \"{0}\" as part of \"{1}\""</span>,</pre></td></tr>
-<tr> <td class="numLine"> 453</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {decl, s});</pre></td></tr>
-<tr> <td class="numLineCover"> 454</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"> 455</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 456</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> String key = parts[0].trim();</pre></td></tr>
-<tr> <td class="numLineCover"> 457</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> String value = parts[1];</pre></td></tr>
-<tr> <td class="numLineCover"> 458</td> <td class="nbHitsCovered"><a title="Line 458: Conditional coverage 100% (2/2)."> 14</a></td> <td class="src"><pre class="src"> <a title="Line 458: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (key.equals(<span class="string">"type"</span>)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 459</td> <td class="nbHitsCovered"><a title="Line 459: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 459: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (value.equals(<span class="string">"group"</span>)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 460</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> isGroup = <span class="keyword">true</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 461</td> <td class="nbHitsCovered"><a title="Line 461: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 461: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (value.equals(<span class="string">"user"</span>)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 462</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> isGroup = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLine"> 463</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 464</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Unknown type \"{0}\" as part of \"{1}\""</span>,</pre></td></tr>
-<tr> <td class="numLine"> 465</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {value, s});</pre></td></tr>
-<tr> <td class="numLineCover"> 466</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"> 467</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 468</td> <td class="nbHitsCovered"><a title="Line 468: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 468: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (key.equals(<span class="string">"name"</span>)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 469</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> name = value;</pre></td></tr>
-<tr> <td class="numLineCover"> 470</td> <td class="nbHitsCovered"><a title="Line 470: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 470: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (key.equals(<span class="string">"domain"</span>)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 471</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> domain = value;</pre></td></tr>
-<tr> <td class="numLineCover"> 472</td> <td class="nbHitsCovered"><a title="Line 472: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 472: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (key.equals(<span class="string">"namespace"</span>)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 473</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> namespace = value;</pre></td></tr>
-<tr> <td class="numLine"> 474</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 244</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> samlServiceProvider</pre></td></tr>
+<tr> <td class="numLine"> 245</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = <span class="keyword">new</span> SamlServiceProvider(sessionManager, metadata, keyPair);</pre></td></tr>
+<tr> <td class="numLineCover"> 246</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> addFilters(scope.createContext(<span class="string">"/samlassertionconsumer"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 247</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> samlServiceProvider.getAssertionConsumer()));</pre></td></tr>
+<tr> <td class="numLineCover"> 248</td> <td class="nbHitsUncovered"><a title="Line 248: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 248: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (adaptorContext.authzAuthority != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 249</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.config(<span class="string">"Adaptor-based authorization supported"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 250</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> addFilters(scope.createContext(<span class="string">"/saml-authz"</span>, <span class="keyword">new</span> SamlBatchAuthzHandler(</span></pre></td></tr>
+<tr> <td class="numLine"> 251</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> adaptorContext.authzAuthority, docIdCodec, metadata)));</pre></td></tr>
+<tr> <td class="numLine"> 252</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 475</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Unknown key \"{0}\" as part of \"{1}\""</span>,</pre></td></tr>
-<tr> <td class="numLine"> 476</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {key, s});</pre></td></tr>
-<tr> <td class="numLineCover"> 477</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"> 478</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 253</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.config(<span class="string">"Adaptor-based authorization not supported"</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"> 479</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 255</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 480</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> AclTransform.MatchData(isGroup, name, domain, namespace);</pre></td></tr>
-<tr> <td class="numLine"> 481</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 482</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 256</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> scheduleExecutor = Executors.newSingleThreadScheduledExecutor(</pre></td></tr>
+<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> ThreadFactoryBuilder().setDaemon(<span class="keyword">true</span>).setNameFormat(<span class="string">"schedule"</span>)</pre></td></tr>
+<tr> <td class="numLine"> 258</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .build());</pre></td></tr>
+<tr> <td class="numLineCover"> 259</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> Watchdog watchdog = <span class="keyword">new</span> Watchdog(scheduleExecutor);</pre></td></tr>
+<tr> <td class="numLine"> 260</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 483</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 484</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Retrieve our default KeyPair from the default keystore. The key should have</span></pre></td></tr>
-<tr> <td class="numLine"> 485</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * the same password as the keystore.</span></pre></td></tr>
-<tr> <td class="numLine"> 486</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 487</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> KeyPair getKeyPair(String alias) <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 488</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String keystoreKey = <span class="string">"javax.net.ssl.keyStore"</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 489</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String keystorePasswordKey = <span class="string">"javax.net.ssl.keyStorePassword"</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 490</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> String keystore = System.getProperty(keystoreKey);</pre></td></tr>
-<tr> <td class="numLineCover"> 491</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> String keystoreType = System.getProperty(<span class="string">"javax.net.ssl.keyStoreType"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 492</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> KeyStore.getDefaultType());</pre></td></tr>
-<tr> <td class="numLineCover"> 493</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> String keystorePassword = System.getProperty(keystorePasswordKey);</pre></td></tr>
-<tr> <td class="numLine"> 494</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 261</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// The cachedThreadPool implementation created here is considerably better</span></pre></td></tr>
+<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// than using ThreadPoolExecutor. ThreadPoolExecutor does not create threads</span></pre></td></tr>
+<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// as would be expected from a thread pool.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 264</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> backgroundExecutor = Executors.newCachedThreadPool(</pre></td></tr>
+<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> ThreadFactoryBuilder().setDaemon(<span class="keyword">true</span>).setNameFormat(<span class="string">"background"</span>)</pre></td></tr>
+<tr> <td class="numLine"> 266</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .build());</pre></td></tr>
+<tr> <td class="numLineCover"> 267</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> backgroundExecutor.execute(waiter.runnable(asyncDocIdSender.worker()));</pre></td></tr>
+<tr> <td class="numLineCover"> 268</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> DocumentHandler docHandler = <span class="keyword">new</span> DocumentHandler(</pre></td></tr>
+<tr> <td class="numLine"> 269</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> docIdCodec, docIdCodec, journal, adaptor, adaptorContext.authzAuthority,</pre></td></tr>
+<tr> <td class="numLine"> 270</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.getGsaHostname(),</pre></td></tr>
+<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.getServerFullAccessHosts(),</pre></td></tr>
+<tr> <td class="numLine"> 272</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> samlServiceProvider, createTransformPipeline(), aclTransform,</pre></td></tr>
+<tr> <td class="numLine"> 273</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.isServerToUseCompression(), watchdog,</pre></td></tr>
+<tr> <td class="numLine"> 274</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> asyncDocIdSender, </pre></td></tr>
+<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.doesGsaAcceptDocControlsHeader(),</pre></td></tr>
+<tr> <td class="numLine"> 276</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.getAdaptorDocHeaderTimeoutMillis(),</pre></td></tr>
+<tr> <td class="numLine"> 277</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.getAdaptorDocContentTimeoutMillis(),</pre></td></tr>
+<tr> <td class="numLine"> 278</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.getScoringType());</pre></td></tr>
+<tr> <td class="numLineCover"> 279</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> String handlerPath = config.getServerBaseUri().getPath()</pre></td></tr>
+<tr> <td class="numLine"> 280</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + config.getServerDocIdPath();</pre></td></tr>
+<tr> <td class="numLineCover"> 281</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> addFilters(scope.createContext(handlerPath, docHandler));</pre></td></tr>
+<tr> <td class="numLine"> 282</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 495</td> <td class="nbHitsUncovered"><a title="Line 495: Conditional coverage 50% (1/2)."> 16</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 495: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (keystore == <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 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> NullPointerException(<span class="string">"You must set "</span> + keystoreKey);</span></pre></td></tr>
-<tr> <td class="numLine"> 497</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 283</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Start communicating with other services. As a general rule, by this time</span></pre></td></tr>
+<tr> <td class="numLine"> 284</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// we want all services we provide to be up and running. However, note that</span></pre></td></tr>
+<tr> <td class="numLine"> 285</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// the adaptor may have started sending feeds as soon as we called init(),</span></pre></td></tr>
+<tr> <td class="numLine"> 286</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// and that is "okay." In addition, the HttpServer we were provided may not</span></pre></td></tr>
+<tr> <td class="numLine"> 287</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// have been started yet.</span></pre></td></tr>
+<tr> <td class="numLine"> 288</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 289</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> scheduler = <span class="keyword">new</span> CronScheduler(scheduleExecutor);</pre></td></tr>
+<tr> <td class="numLineCover"> 290</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> docIdFullPusher = <span class="keyword">new</span> OneAtATimeRunnable(</pre></td></tr>
+<tr> <td class="numLine"> 291</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> PushRunnable(adaptorContext.fullExceptionHandler),</pre></td></tr>
+<tr> <td class="numLine"> 292</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> AlreadyRunningRunnable());</pre></td></tr>
+<tr> <td class="numLineCover"> 293</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> sendDocIdsFuture = scheduler.schedule(</pre></td></tr>
+<tr> <td class="numLine"> 294</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.getAdaptorFullListingSchedule(),</pre></td></tr>
+<tr> <td class="numLine"> 295</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> waiter.runnable(<span class="keyword">new</span> BackgroundRunnable(docIdFullPusher)));</pre></td></tr>
+<tr> <td class="numLineCover"> 296</td> <td class="nbHitsCovered"><a title="Line 296: Conditional coverage 100% (2/2)."> 15</a></td> <td class="src"><pre class="src"> <a title="Line 296: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (config.isAdaptorPushDocIdsOnStartup()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 297</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> log.info(<span class="string">"Pushing once at program start"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 298</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> checkAndScheduleImmediatePushOfDocIds();</pre></td></tr>
+<tr> <td class="numLine"> 299</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 498</td> <td class="nbHitsUncovered"><a title="Line 498: Conditional coverage 50% (1/2)."> 16</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 498: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (keystorePassword == <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 499</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException(<span class="string">"You must set "</span> + keystorePasswordKey);</span></pre></td></tr>
-<tr> <td class="numLine"> 500</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 300</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 301</td> <td class="nbHitsCovered"><a title="Line 301: Conditional coverage 100% (2/2)."> 15</a></td> <td class="src"><pre class="src"> <a title="Line 301: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (adaptorContext.pollingIncrementalLister != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 302</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> docIdIncrementalPusher = <span class="keyword">new</span> OneAtATimeRunnable(</pre></td></tr>
+<tr> <td class="numLine"> 303</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> IncrementalPushRunnable(adaptorContext.pollingIncrementalLister,</pre></td></tr>
+<tr> <td class="numLine"> 304</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> adaptorContext.incrExceptionHandler),</pre></td></tr>
+<tr> <td class="numLine"> 305</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> AlreadyRunningRunnable());</pre></td></tr>
+<tr> <td class="numLine"> 306</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 307</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> scheduleExecutor.scheduleAtFixedRate(</pre></td></tr>
+<tr> <td class="numLine"> 308</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> waiter.runnable(<span class="keyword">new</span> BackgroundRunnable(docIdIncrementalPusher)),</pre></td></tr>
+<tr> <td class="numLine"> 309</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> 0,</pre></td></tr>
+<tr> <td class="numLine"> 310</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.getAdaptorIncrementalPollPeriodMillis(),</pre></td></tr>
+<tr> <td class="numLine"> 311</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> TimeUnit.MILLISECONDS);</pre></td></tr>
+<tr> <td class="numLine"> 312</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 501</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 313</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 502</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">return</span> getKeyPair(alias, keystore, keystoreType, keystorePassword);</pre></td></tr>
-<tr> <td class="numLine"> 503</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 504</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 505</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">static</span> KeyPair getKeyPair(String alias, String keystoreFile,</pre></td></tr>
-<tr> <td class="numLine"> 506</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> String keystoreType, String keystorePasswordStr) <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLine"> 507</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> PrivateKey privateKey;</pre></td></tr>
-<tr> <td class="numLine"> 508</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> PublicKey publicKey;</pre></td></tr>
-<tr> <td class="numLine"> 509</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 314</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> dashboard = <span class="keyword">new</span> Dashboard(config, <span class="keyword">this</span>, journal, sessionManager,</pre></td></tr>
+<tr> <td class="numLine"> 315</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> secureValueCodec, adaptor, adaptorContext.statusSources);</pre></td></tr>
+<tr> <td class="numLineCover"> 316</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> dashboard.start(dashboardScope);</pre></td></tr>
+<tr> <td class="numLineCover"> 317</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 319</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">void</span> tryToPutVersionIntoConfig() <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLine"> 320</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 510</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> KeyStore ks = KeyStore.getInstance(keystoreType);</pre></td></tr>
-<tr> <td class="numLineCover"> 511</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> InputStream ksis = <span class="keyword">new</span> FileInputStream(keystoreFile);</pre></td></tr>
-<tr> <td class="numLineCover"> 512</td> <td class="nbHitsUncovered"><a title="Line 512: Conditional coverage 50% (1/2)."> 18</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 512: Conditional coverage 50% (1/2)."> <span class="keyword">char</span>[] keystorePassword = keystorePasswordStr == <span class="keyword">null</span> ? <span class="keyword">null</span></a></span></pre></td></tr>
-<tr> <td class="numLine"> 513</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> : keystorePasswordStr.toCharArray();</pre></td></tr>
-<tr> <td class="numLine"> 514</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 321</td> <td class="nbHitsUncovered"><a title="Line 321: Conditional coverage 50% (1/2)."> 11</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 321: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (<span class="string">"GENERATE"</span>.equals(config.getGsaVersion())) { <span class="comment">// is not set</span></a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 322</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> GsaVersion ver = GsaVersion.get(config.getGsaHostname(),</span></pre></td></tr>
+<tr> <td class="numLine"> 323</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.isServerSecure());</pre></td></tr>
+<tr> <td class="numLineCover"> 324</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.overrideKey(<span class="string">"gsa.version"</span>, <span class="string">""</span> + ver);</span></pre></td></tr>
+<tr> <td class="numLine"> 325</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 326</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (FileNotFoundException fne) {</span></pre></td></tr>
+<tr> <td class="numLine"> 327</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// we're talking to an older GSA that cannot tell us its version.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 328</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.FINE, <span class="string">"gsa didn't provide version"</span>, fne);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 329</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.setValue(<span class="string">"gsa.version"</span>, <span class="string">"7.0.14-114"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 330</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IllegalArgumentException iae) {</span></pre></td></tr>
+<tr> <td class="numLine"> 331</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// we're talking to a GSA whose version we don't understand </span></pre></td></tr>
+<tr> <td class="numLineCover"> 332</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.FINE, <span class="string">"gsa provided incomprehensible version"</span>, iae);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 333</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.setValue(<span class="string">"gsa.version"</span>, <span class="string">"7.0.14-114"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 334</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> } <span class="comment">// other IOException propagates out</span></pre></td></tr>
+<tr> <td class="numLineCover"> 335</td> <td class="nbHitsCovered"> 11</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">private</span> TransformPipeline createTransformPipeline() {</pre></td></tr>
+<tr> <td class="numLineCover"> 338</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> <span class="keyword">return</span> createTransformPipeline(config.getTransformPipelineSpec());</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>
+<tr> <td class="numLine"> 341</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @VisibleForTesting</pre></td></tr>
+<tr> <td class="numLine"> 342</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">static</span> TransformPipeline createTransformPipeline(</pre></td></tr>
+<tr> <td class="numLine"> 343</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> List<Map<String, String>> pipelineConfig) {</pre></td></tr>
+<tr> <td class="numLineCover"> 344</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> List<DocumentTransform> elements = <span class="keyword">new</span> LinkedList<DocumentTransform>();</pre></td></tr>
+<tr> <td class="numLineCover"> 345</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> List<String> names = <span class="keyword">new</span> LinkedList<String>();</pre></td></tr>
+<tr> <td class="numLineCover"> 346</td> <td class="nbHitsCovered"><a title="Line 346: Conditional coverage 100% (2/2)."> 23</a></td> <td class="src"><pre class="src"> <a title="Line 346: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map<String, String> element : pipelineConfig) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 347</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String name = element.get(<span class="string">"name"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 348</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String confPrefix = <span class="string">"transform.pipeline."</span> + name + <span class="string">"."</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 349</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> String factoryMethodName = element.get(<span class="string">"factoryMethod"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 350</td> <td class="nbHitsCovered"><a title="Line 350: Conditional coverage 100% (2/2)."> 7</a></td> <td class="src"><pre class="src"> <a title="Line 350: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (factoryMethodName == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 351</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(</pre></td></tr>
+<tr> <td class="numLine"> 352</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Missing "</span> + confPrefix + <span class="string">"factoryMethod configuration setting"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 353</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 354</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">int</span> sepIndex = factoryMethodName.lastIndexOf(<span class="string">"."</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 355</td> <td class="nbHitsCovered"><a title="Line 355: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 355: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (sepIndex == -1) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 356</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"Could not separate method name from class "</span></pre></td></tr>
+<tr> <td class="numLine"> 357</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"name"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 358</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 359</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> String className = factoryMethodName.substring(0, sepIndex);</pre></td></tr>
+<tr> <td class="numLineCover"> 360</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> String methodName = factoryMethodName.substring(sepIndex + 1);</pre></td></tr>
+<tr> <td class="numLineCover"> 361</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Split {0} into class {1} and method {2}"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 362</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {factoryMethodName, className, methodName});</pre></td></tr>
+<tr> <td class="numLine"> 363</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Class<?> klass;</pre></td></tr>
+<tr> <td class="numLine"> 364</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 515</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> ks.load(ksis, keystorePassword);</pre></td></tr>
-<tr> <td class="numLineCover"> 516</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"> 517</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"> 518</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (CertificateException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 519</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</span></pre></td></tr>
-<tr> <td class="numLine"> 520</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 521</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> ksis.close();</pre></td></tr>
-<tr> <td class="numLineCover"> 522</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 523</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> Key key = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 524</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 365</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> klass = Class.forName(className);</pre></td></tr>
+<tr> <td class="numLineCover"> 366</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (ClassNotFoundException ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 367</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(</pre></td></tr>
+<tr> <td class="numLine"> 368</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Could not load class for transform "</span> + name, ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 369</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 370</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Method method;</pre></td></tr>
+<tr> <td class="numLine"> 371</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 525</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> key = ks.getKey(alias, keystorePassword);</pre></td></tr>
-<tr> <td class="numLineCover"> 526</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"> 527</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"> 528</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (UnrecoverableKeyException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 529</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"> 530</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 531</td> <td class="nbHitsCovered"><a title="Line 531: Conditional coverage 100% (2/2)."> 18</a></td> <td class="src"><pre class="src"> <a title="Line 531: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (key == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 532</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Could not find key for alias '"</span></pre></td></tr>
-<tr> <td class="numLine"> 533</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + alias + <span class="string">"'"</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="numLineCover"> 535</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> privateKey = (PrivateKey) key;</pre></td></tr>
-<tr> <td class="numLineCover"> 536</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> publicKey = ks.getCertificate(alias).getPublicKey();</pre></td></tr>
-<tr> <td class="numLineCover"> 537</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (KeyStoreException ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 538</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 539</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 540</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> KeyPair(publicKey, privateKey);</pre></td></tr>
-<tr> <td class="numLine"> 541</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 542</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 543</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Useful as a separate method during testing.</span></pre></td></tr>
-<tr> <td class="numLine"> 544</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">void</span> bootstrapOpenSaml() {</pre></td></tr>
-<tr> <td class="numLine"> 545</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 546</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> DefaultBootstrap.bootstrap();</pre></td></tr>
-<tr> <td class="numLineCover"> 547</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (ConfigurationException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 548</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"> 549</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 550</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 551</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 552</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 553</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Stops servicing incoming requests, allowing up to {@code maxDelay} seconds</span></pre></td></tr>
-<tr> <td class="numLine"> 554</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * for things to shutdown. After called, no requests will be sent to the</span></pre></td></tr>
-<tr> <td class="numLine"> 555</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Adaptor.</span></pre></td></tr>
-<tr> <td class="numLine"> 556</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
-<tr> <td class="numLine"> 557</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @return {@code true} if shutdown cleanly, {@code false} if requests may</span></pre></td></tr>
-<tr> <td class="numLine"> 558</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * still be processing</span></pre></td></tr>
-<tr> <td class="numLine"> 559</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 560</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="keyword">boolean</span> stop(<span class="keyword">long</span> time, TimeUnit unit) {</pre></td></tr>
-<tr> <td class="numLineCover"> 561</td> <td class="nbHitsCovered"> 31</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> clean = <span class="keyword">true</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 562</td> <td class="nbHitsCovered"><a title="Line 562: Conditional coverage 100% (2/2)."> 31</a></td> <td class="src"><pre class="src"> <a title="Line 562: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (adaptorContext != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 563</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> adaptorContext.freeze();</pre></td></tr>
-<tr> <td class="numLine"> 564</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 565</td> <td class="nbHitsCovered"><a title="Line 565: Conditional coverage 100% (2/2)."> 31</a></td> <td class="src"><pre class="src"> <a title="Line 565: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (scope != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 566</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> scope.close();</pre></td></tr>
-<tr> <td class="numLineCover"> 567</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> scope = <span class="keyword">new</span> HttpServerScope(</pre></td></tr>
-<tr> <td class="numLine"> 568</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> scope.getHttpServer(), scope.getContextPrefix());</pre></td></tr>
-<tr> <td class="numLine"> 569</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 570</td> <td class="nbHitsCovered"><a title="Line 570: Conditional coverage 100% (2/2)."> 31</a></td> <td class="src"><pre class="src"> <a title="Line 570: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (scheduleExecutor != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLine"> 571</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Post-Adaptor.init() resources need to be stopped.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 572</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> dashboardScope.close();</pre></td></tr>
-<tr> <td class="numLineCover"> 573</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> dashboardScope = <span class="keyword">new</span> HttpServerScope(</pre></td></tr>
-<tr> <td class="numLine"> 574</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> dashboardScope.getHttpServer(), dashboardScope.getContextPrefix());</pre></td></tr>
-<tr> <td class="numLine"> 575</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 576</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> scheduleExecutor.shutdownNow();</pre></td></tr>
-<tr> <td class="numLineCover"> 577</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> scheduleExecutor = <span class="keyword">null</span>;</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"> 579</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> backgroundExecutor.shutdownNow();</pre></td></tr>
-<tr> <td class="numLineCover"> 580</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> backgroundExecutor = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 581</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 582</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> scheduler = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 583</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> sendDocIdsFuture = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 584</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 585</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> docIdIncrementalPusher = <span class="keyword">null</span>;</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="numLineCover"> 587</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> dashboard.stop();</pre></td></tr>
-<tr> <td class="numLineCover"> 588</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> dashboard = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 589</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 590</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Clear references set by Adaptor via AdaptorContext.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 591</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> docIdFullPusher = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 592</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> docIdIncrementalPusher = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 593</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 594</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 372</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> method = klass.getDeclaredMethod(methodName, Map.<span class="keyword">class</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 373</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (NoSuchMethodException ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 374</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"Could not find method "</span> + methodName</pre></td></tr>
+<tr> <td class="numLine"> 375</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">" on class "</span> + className, ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 376</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 377</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Found method {0}"</span>, <span class="keyword">new</span> Object[] {method});</pre></td></tr>
+<tr> <td class="numLine"> 378</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Object o;</pre></td></tr>
+<tr> <td class="numLine"> 379</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 595</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> clean = clean & waiter.shutdown(time, unit);</pre></td></tr>
-<tr> <td class="numLineCover"> 596</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"> 597</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"> 598</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> clean = <span class="keyword">false</span>;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 599</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 600</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> waiter = <span class="keyword">new</span> ShutdownWaiter();</pre></td></tr>
-<tr> <td class="numLine"> 601</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 602</td> <td class="nbHitsCovered"> 31</td> <td class="src"><pre class="src"> <span class="keyword">return</span> clean;</pre></td></tr>
-<tr> <td class="numLine"> 603</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 380</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> o = method.invoke(<span class="keyword">null</span>, Collections.unmodifiableMap(element));</pre></td></tr>
+<tr> <td class="numLineCover"> 381</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (Exception ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 382</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"Failure while running factory method "</span></pre></td></tr>
+<tr> <td class="numLine"> 383</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + factoryMethodName, ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 384</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 385</td> <td class="nbHitsCovered"><a title="Line 385: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 385: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!(o <span class="keyword">instanceof</span> DocumentTransform)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 386</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> ClassCastException(o.getClass().getName()</pre></td></tr>
+<tr> <td class="numLine"> 387</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">" is not an instance of DocumentTransform"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 388</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 389</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> DocumentTransform transform = (DocumentTransform) o;</pre></td></tr>
+<tr> <td class="numLineCover"> 390</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> elements.add(transform);</pre></td></tr>
+<tr> <td class="numLineCover"> 391</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> names.add(name);</pre></td></tr>
+<tr> <td class="numLineCover"> 392</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 393</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// If we created an empty pipeline, then we don't need the pipeline at all.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 394</td> <td class="nbHitsCovered"><a title="Line 394: Conditional coverage 100% (2/2)."> 17</a></td> <td class="src"><pre class="src"> <a title="Line 394: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> elements.size() > 0 ? <span class="keyword">new</span> TransformPipeline(elements, names) : <span class="keyword">null</span>;</a></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"> 604</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 396</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">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 606</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Stop services necessary for handling outgoing requests. This call</span></pre></td></tr>
-<tr> <td class="numLine"> 607</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * invalidates the {@link AdaptorContext} returned from {@link #setup}.</span></pre></td></tr>
-<tr> <td class="numLine"> 608</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 609</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> teardown() {</pre></td></tr>
-<tr> <td class="numLineCover"> 610</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> scope = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 611</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> dashboardScope = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 612</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> keyPair = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 613</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> aclTransform = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 614</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> waiter = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 615</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 616</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Wait until after adaptor.destroy() to shutdown things accessible by</span></pre></td></tr>
-<tr> <td class="numLine"> 617</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// AdaptorContext, so that the AdaptorContext is usable until the very</span></pre></td></tr>
-<tr> <td class="numLine"> 618</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// end.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 619</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> secureValueCodec = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 620</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> sessionManager = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 621</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> docIdCodec = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 622</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> docIdSender = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 623</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> adaptorContext = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 624</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 625</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 626</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 627</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Ensure there is a push running right now. This schedules a new push if one</span></pre></td></tr>
-<tr> <td class="numLine"> 628</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * is not already running. Returns {@code true} if it starts a new push, and</span></pre></td></tr>
-<tr> <td class="numLine"> 629</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * {@code false} otherwise.</span></pre></td></tr>
-<tr> <td class="numLine"> 630</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 631</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> checkAndScheduleImmediatePushOfDocIds() {</pre></td></tr>
-<tr> <td class="numLineCover"> 632</td> <td class="nbHitsUncovered"><a title="Line 632: Conditional coverage 50% (1/2)."> 12</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 632: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (docIdFullPusher.isRunning()) {</a></span></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">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
-<tr> <td class="numLine"> 634</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 635</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// This check-then-execute permits a race between checking and starting the</span></pre></td></tr>
-<tr> <td class="numLine"> 636</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// runnable, but it shouldn't be a major issue since the caller wanted a</span></pre></td></tr>
-<tr> <td class="numLine"> 637</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// push to start right now, and one "just started."</span></pre></td></tr>
-<tr> <td class="numLineCover"> 638</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> backgroundExecutor.execute(waiter.runnable(docIdFullPusher));</pre></td></tr>
-<tr> <td class="numLineCover"> 639</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="numLine"> 640</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 397</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> AclTransform createAclTransform() {</pre></td></tr>
+<tr> <td class="numLineCover"> 398</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">return</span> createAclTransform(config.getValuesWithPrefix(<span class="string">"transform.acl."</span>));</pre></td></tr>
+<tr> <td class="numLine"> 399</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 641</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 400</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 642</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 643</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Perform an push of incremental changes. This works only for adaptors that</span></pre></td></tr>
-<tr> <td class="numLine"> 644</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * support incremental polling (implements {@link PollingIncrementalLister}.</span></pre></td></tr>
-<tr> <td class="numLine"> 645</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 646</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="keyword">boolean</span> checkAndScheduleIncrementalPushOfDocIds() {</pre></td></tr>
-<tr> <td class="numLineCover"> 647</td> <td class="nbHitsUncovered"><a title="Line 647: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 647: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (docIdIncrementalPusher == <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 648</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></pre></td></tr>
-<tr> <td class="numLine"> 649</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"This adaptor does not support incremental push"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 650</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 651</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </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">if</span> (docIdIncrementalPusher.isRunning()) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 653</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
-<tr> <td class="numLine"> 654</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 655</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// This permits a race between checking and starting the runnable, but it</span></pre></td></tr>
-<tr> <td class="numLine"> 656</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// shouldn't be a major issue since the caller wanted a push to start right</span></pre></td></tr>
-<tr> <td class="numLine"> 657</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// now, and one "just started."</span></pre></td></tr>
-<tr> <td class="numLineCover"> 658</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> backgroundExecutor.execute(waiter.runnable(docIdIncrementalPusher));</span></pre></td></tr>
-<tr> <td class="numLineCover"> 659</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">true</span>;</span></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="keyword">boolean</span> isAdaptorIncremental() {</pre></td></tr>
-<tr> <td class="numLineCover"> 663</td> <td class="nbHitsUncovered"><a title="Line 663: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 15</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 663: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (adaptorContext == <span class="keyword">null</span> || adaptorContext.mutable) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 664</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">"Can only be used after init()"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 665</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 666</td> <td class="nbHitsCovered"><a title="Line 666: Conditional coverage 100% (2/2)."> 15</a></td> <td class="src"><pre class="src"> <a title="Line 666: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> adaptorContext.pollingIncrementalLister != <span class="keyword">null</span>;</a></pre></td></tr>
-<tr> <td class="numLine"> 667</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</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="numLine"> 669</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">boolean</span> ensureLatestConfigLoaded() {</pre></td></tr>
-<tr> <td class="numLine"> 670</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 671</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> config.ensureLatestConfigLoaded();</pre></td></tr>
-<tr> <td class="numLineCover"> 672</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"> 673</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Error while trying to reload configuration"</span>,</span></pre></td></tr>
-<tr> <td class="numLine"> 674</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 675</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
-<tr> <td class="numLine"> 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="numLine"> 678</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 679</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">synchronized</span> <span class="keyword">void</span> rescheduleFullListing(String schedule) {</pre></td></tr>
-<tr> <td class="numLineCover"> 680</td> <td class="nbHitsUncovered"><a title="Line 680: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 680: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (sendDocIdsFuture == <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 681</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"> 682</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 683</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 684</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> scheduler.reschedule(sendDocIdsFuture, schedule);</pre></td></tr>
-<tr> <td class="numLineCover"> 685</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"> 686</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Invalid schedule pattern"</span>, ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 687</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 688</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</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"> <span class="comment">/** The adaptor instance being used. */</span></pre></td></tr>
-<tr> <td class="numLine"> 691</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Adaptor getAdaptor() {</pre></td></tr>
-<tr> <td class="numLineCover"> 692</td> <td class="nbHitsCovered"> 33</td> <td class="src"><pre class="src"> <span class="keyword">return</span> adaptor;</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="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"> HttpContext addFilters(HttpContext context) {</pre></td></tr>
-<tr> <td class="numLineCover"> 696</td> <td class="nbHitsCovered"> 77</td> <td class="src"><pre class="src"> context.getFilters().add(waiter.filter());</pre></td></tr>
-<tr> <td class="numLineCover"> 697</td> <td class="nbHitsCovered"> 77</td> <td class="src"><pre class="src"> context.getFilters().addAll(commonFilters);</pre></td></tr>
-<tr> <td class="numLineCover"> 698</td> <td class="nbHitsCovered"> 77</td> <td class="src"><pre class="src"> <span class="keyword">return</span> context;</pre></td></tr>
-<tr> <td class="numLine"> 699</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 700</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 701</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 702</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Runnable that calls {@link DocIdSender#pushDocIds}.</span></pre></td></tr>
-<tr> <td class="numLine"> 703</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 704</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> PushRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
-<tr> <td class="numLine"> 705</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ExceptionHandler handler;</pre></td></tr>
-<tr> <td class="numLine"> 706</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 707</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> <span class="keyword">public</span> PushRunnable(ExceptionHandler handler) {</pre></td></tr>
-<tr> <td class="numLineCover"> 708</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.handler = handler;</pre></td></tr>
-<tr> <td class="numLineCover"> 709</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 710</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 711</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 712</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"> 713</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 401</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @VisibleForTesting</pre></td></tr>
+<tr> <td class="numLine"> 402</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">static</span> AclTransform createAclTransform(Map<String, String> aclConfigRaw) {</pre></td></tr>
+<tr> <td class="numLineCover"> 403</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> Map<Integer, String> aclConfig = <span class="keyword">new</span> TreeMap<Integer, String>();</pre></td></tr>
+<tr> <td class="numLineCover"> 404</td> <td class="nbHitsCovered"><a title="Line 404: Conditional coverage 100% (2/2)."> 18</a></td> <td class="src"><pre class="src"> <a title="Line 404: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map.Entry<String, String> me : aclConfigRaw.entrySet()) {</a></pre></td></tr>
+<tr> <td class="numLine"> 405</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 714</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> docIdSender.pushFullDocIdsFromAdaptor(handler);</pre></td></tr>
-<tr> <td class="numLineCover"> 715</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (InterruptedException ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 716</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> Thread.currentThread().interrupt();</pre></td></tr>
-<tr> <td class="numLineCover"> 717</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 718</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 719</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 406</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> aclConfig.put(Integer.parseInt(me.getKey()), me.getValue());</pre></td></tr>
+<tr> <td class="numLineCover"> 407</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (NumberFormatException ex) {</pre></td></tr>
+<tr> <td class="numLine"> 408</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Don't insert into map.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 409</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Ignorning transform.acl.{0} because {0} is not an "</span></pre></td></tr>
+<tr> <td class="numLine"> 410</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"integer"</span>, me.getKey());</pre></td></tr>
+<tr> <td class="numLineCover"> 411</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 412</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 413</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 414</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> List<AclTransform.Rule> rules = <span class="keyword">new</span> LinkedList<AclTransform.Rule>();</pre></td></tr>
+<tr> <td class="numLineCover"> 415</td> <td class="nbHitsCovered"><a title="Line 415: Conditional coverage 100% (2/2)."> 18</a></td> <td class="src"><pre class="src"> <a title="Line 415: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String value : aclConfig.values()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 416</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> String[] parts = value.split(<span class="string">";"</span>, 2);</pre></td></tr>
+<tr> <td class="numLineCover"> 417</td> <td class="nbHitsCovered"><a title="Line 417: Conditional coverage 100% (2/2)."> 8</a></td> <td class="src"><pre class="src"> <a title="Line 417: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (parts.length != 2) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 418</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Could not find semicolon in acl transform: {0}"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 419</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> value);</pre></td></tr>
+<tr> <td class="numLineCover"> 420</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
+<tr> <td class="numLine"> 421</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"> AclTransform.MatchData search = parseAclTransformMatchData(parts[0]);</pre></td></tr>
+<tr> <td class="numLineCover"> 423</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> AclTransform.MatchData replace = parseAclTransformMatchData(parts[1]);</pre></td></tr>
+<tr> <td class="numLineCover"> 424</td> <td class="nbHitsUncovered"><a title="Line 424: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> 7</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 424: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (search == <span class="keyword">null</span> || replace == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 425</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> log.log(Level.WARNING,</pre></td></tr>
+<tr> <td class="numLine"> 426</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Could not parse acl transform rule: {0}"</span>, value);</pre></td></tr>
+<tr> <td class="numLineCover"> 427</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
+<tr> <td class="numLine"> 428</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 429</td> <td class="nbHitsCovered"><a title="Line 429: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 429: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (replace.isGroup != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 430</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING,</pre></td></tr>
+<tr> <td class="numLine"> 431</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Replacement cannot change type. Failed in rule: {0}"</span>, value);</pre></td></tr>
+<tr> <td class="numLineCover"> 432</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
+<tr> <td class="numLine"> 433</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 434</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> rules.add(<span class="keyword">new</span> AclTransform.Rule(search, replace));</pre></td></tr>
+<tr> <td class="numLineCover"> 435</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 436</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> AclTransform(rules);</pre></td></tr>
+<tr> <td class="numLine"> 437</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 720</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 438</td> <td class="nbHits"> </td>
<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>
-<tr> <td class="numLine"> 722</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Runnable that performs incremental feed push.</span></pre></td></tr>
-<tr> <td class="numLine"> 723</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 724</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> IncrementalPushRunnable <span class="keyword">implements</span> Runnable {</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">final</span> ExceptionHandler handler;</pre></td></tr>
-<tr> <td class="numLine"> 726</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> PollingIncrementalLister incrementalLister;</pre></td></tr>
-<tr> <td class="numLine"> 727</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 728</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> IncrementalPushRunnable(PollingIncrementalLister incrementalLister,</pre></td></tr>
-<tr> <td class="numLineCover"> 729</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ExceptionHandler handler) {</pre></td></tr>
-<tr> <td class="numLineCover"> 730</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.incrementalLister = incrementalLister;</pre></td></tr>
-<tr> <td class="numLineCover"> 731</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.handler = handler;</pre></td></tr>
-<tr> <td class="numLineCover"> 732</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 733</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 734</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 735</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"> 736</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 737</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> docIdSender.pushIncrementalDocIdsFromAdaptor(</pre></td></tr>
-<tr> <td class="numLine"> 738</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> incrementalLister, handler);</pre></td></tr>
-<tr> <td class="numLineCover"> 739</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"> 740</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"> 741</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"> 742</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Exception during incremental polling"</span>, ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 743</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 744</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 745</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</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="numLine"> 747</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 748</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Runnable that logs an error that {@link PushRunnable} is already executing.</span></pre></td></tr>
-<tr> <td class="numLine"> 749</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 750</td> <td class="nbHitsCovered"> 32</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> AlreadyRunningRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
-<tr> <td class="numLine"> 751</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 752</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"> 753</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"Skipping scheduled push of docIds. The previous invocation "</span></span></pre></td></tr>
-<tr> <td class="numLine"> 754</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">"is still running."</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 755</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 756</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 757</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 758</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 759</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Runnable that when invoked executes the delegate with {@link</span></pre></td></tr>
-<tr> <td class="numLine"> 760</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * #backgroundExecutor} and then returns before completion. That implies that</span></pre></td></tr>
-<tr> <td class="numLine"> 761</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * uses of this class must ensure they do not add an instance directly to</span></pre></td></tr>
-<tr> <td class="numLine"> 762</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * {@link #backgroundExecutor}, otherwise an odd infinite loop will occur.</span></pre></td></tr>
-<tr> <td class="numLine"> 763</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 764</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> BackgroundRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
-<tr> <td class="numLine"> 765</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Runnable delegate;</pre></td></tr>
-<tr> <td class="numLine"> 766</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 767</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">public</span> BackgroundRunnable(Runnable delegate) {</pre></td></tr>
-<tr> <td class="numLineCover"> 768</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.delegate = delegate;</pre></td></tr>
-<tr> <td class="numLineCover"> 769</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 770</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 771</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 772</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"> 773</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Wrap with waiter.runnable() every time instead of in constructor to aid</span></pre></td></tr>
-<tr> <td class="numLine"> 774</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// auditing the code for "ShutdownWaiter correctness."</span></pre></td></tr>
-<tr> <td class="numLineCover"> 775</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> backgroundExecutor.execute(waiter.runnable(delegate));</pre></td></tr>
-<tr> <td class="numLineCover"> 776</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 777</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 778</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 779</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 780</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * This class is thread-safe.</span></pre></td></tr>
-<tr> <td class="numLine"> 781</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 782</td> <td class="nbHitsCovered"> 158</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> AdaptorContextImpl <span class="keyword">implements</span> AdaptorContext {</pre></td></tr>
-<tr> <td class="numLineCover"> 783</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> mutable = <span class="keyword">true</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 784</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> ExceptionHandler fullExceptionHandler</pre></td></tr>
-<tr> <td class="numLine"> 785</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> = ExceptionHandlers.defaultHandler();</pre></td></tr>
-<tr> <td class="numLineCover"> 786</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> ExceptionHandler incrExceptionHandler</pre></td></tr>
-<tr> <td class="numLine"> 787</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> = ExceptionHandlers.defaultHandler();</pre></td></tr>
-<tr> <td class="numLineCover"> 788</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> List<StatusSource> statusSources</pre></td></tr>
-<tr> <td class="numLine"> 789</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> = <span class="keyword">new</span> ArrayList<StatusSource>();</pre></td></tr>
-<tr> <td class="numLine"> 790</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> PollingIncrementalLister pollingIncrementalLister;</pre></td></tr>
-<tr> <td class="numLine"> 791</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> AuthnAuthority authnAuthority;</pre></td></tr>
-<tr> <td class="numLine"> 792</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> AuthzAuthority authzAuthority;</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="numLine"> 794</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">synchronized</span> <span class="keyword">void</span> freeze() {</pre></td></tr>
-<tr> <td class="numLineCover"> 795</td> <td class="nbHitsCovered"> 32</td> <td class="src"><pre class="src"> mutable = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 796</td> <td class="nbHitsCovered"> 32</td> <td class="src"><pre class="src"> }</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="numLine"> 798</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 799</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"> 800</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"> 801</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 439</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> AclTransform.MatchData parseAclTransformMatchData(String s) {</pre></td></tr>
+<tr> <td class="numLineCover"> 440</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> String[] decls = s.split(<span class="string">","</span>, -1);</pre></td></tr>
+<tr> <td class="numLineCover"> 441</td> <td class="nbHitsCovered"><a title="Line 441: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 14</a></td> <td class="src"><pre class="src"> <a title="Line 441: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (decls.length == 1 && decls[0].trim().equals(<span class="string">""</span>)) {</a></pre></td></tr>
+<tr> <td class="numLine"> 442</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// No declarations are required</span></pre></td></tr>
+<tr> <td class="numLineCover"> 443</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> AclTransform.MatchData(<span class="keyword">null</span>, <span class="keyword">null</span>, <span class="keyword">null</span>, <span class="keyword">null</span>);</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"> 802</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 803</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 804</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdPusher getDocIdPusher() {</pre></td></tr>
-<tr> <td class="numLineCover"> 805</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> docIdSender;</pre></td></tr>
-<tr> <td class="numLine"> 806</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 807</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 808</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 809</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdEncoder getDocIdEncoder() {</pre></td></tr>
-<tr> <td class="numLineCover"> 810</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> docIdCodec;</pre></td></tr>
-<tr> <td class="numLine"> 811</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</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"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 814</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> addStatusSource(StatusSource source) {</pre></td></tr>
-<tr> <td class="numLineCover"> 815</td> <td class="nbHitsUncovered"><a title="Line 815: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 815: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!mutable) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 816</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">"After init()"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 817</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 445</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> Boolean isGroup = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 446</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> String name = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 447</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> String domain = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 448</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> String namespace = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 449</td> <td class="nbHitsCovered"><a title="Line 449: Conditional coverage 100% (2/2)."> 25</a></td> <td class="src"><pre class="src"> <a title="Line 449: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String decl : decls) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 450</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> String parts[] = decl.split(<span class="string">"="</span>, 2);</pre></td></tr>
+<tr> <td class="numLineCover"> 451</td> <td class="nbHitsCovered"><a title="Line 451: Conditional coverage 100% (2/2)."> 15</a></td> <td class="src"><pre class="src"> <a title="Line 451: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (parts.length != 2) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 452</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING,</pre></td></tr>
+<tr> <td class="numLine"> 453</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Could not find \"=\" in \"{0}\" as part of \"{1}\""</span>,</pre></td></tr>
+<tr> <td class="numLine"> 454</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {decl, s});</pre></td></tr>
+<tr> <td class="numLineCover"> 455</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"> 456</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 818</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statusSources.add(source);</pre></td></tr>
-<tr> <td class="numLineCover"> 819</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</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"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 822</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> setGetDocIdsFullErrorHandler(</pre></td></tr>
-<tr> <td class="numLine"> 823</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> ExceptionHandler handler) {</pre></td></tr>
-<tr> <td class="numLineCover"> 824</td> <td class="nbHitsUncovered"><a title="Line 824: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 824: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!mutable) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 825</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">"After init()"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 826</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 827</td> <td class="nbHitsUncovered"><a title="Line 827: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 827: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (handler == <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 828</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</span></pre></td></tr>
-<tr> <td class="numLine"> 829</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 830</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> fullExceptionHandler = handler;</pre></td></tr>
-<tr> <td class="numLineCover"> 831</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</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"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 834</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> ExceptionHandler getGetDocIdsFullErrorHandler() {</pre></td></tr>
-<tr> <td class="numLineCover"> 835</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> fullExceptionHandler;</pre></td></tr>
-<tr> <td class="numLine"> 836</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 837</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 838</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 839</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> setGetDocIdsIncrementalErrorHandler(</pre></td></tr>
-<tr> <td class="numLine"> 840</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> ExceptionHandler handler) {</pre></td></tr>
-<tr> <td class="numLineCover"> 841</td> <td class="nbHitsUncovered"><a title="Line 841: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 841: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!mutable) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 842</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">"After init()"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 843</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 844</td> <td class="nbHitsUncovered"><a title="Line 844: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 844: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (handler == <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 845</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</span></pre></td></tr>
-<tr> <td class="numLine"> 846</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 847</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> incrExceptionHandler = handler;</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></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="numLine"> 850</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 851</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> ExceptionHandler getGetDocIdsIncrementalErrorHandler() {</pre></td></tr>
-<tr> <td class="numLineCover"> 852</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> incrExceptionHandler;</span></pre></td></tr>
-<tr> <td class="numLine"> 853</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 854</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 855</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 856</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> SensitiveValueDecoder getSensitiveValueDecoder() {</pre></td></tr>
-<tr> <td class="numLineCover"> 857</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> secureValueCodec;</pre></td></tr>
-<tr> <td class="numLine"> 858</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 859</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 860</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 861</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> HttpContext createHttpContext(String path,</pre></td></tr>
-<tr> <td class="numLine"> 862</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> HttpHandler handler) {</pre></td></tr>
-<tr> <td class="numLineCover"> 863</td> <td class="nbHitsUncovered"><a title="Line 863: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 863: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!mutable) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 864</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">"After init()"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 865</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 866</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> addFilters(scope.createContext(path, handler));</pre></td></tr>
-<tr> <td class="numLine"> 867</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 868</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 869</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 870</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Session getUserSession(HttpExchange ex, <span class="keyword">boolean</span> create) {</pre></td></tr>
-<tr> <td class="numLineCover"> 871</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Session session = sessionManager.getSession(ex, create);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 872</td> <td class="nbHitsUncovered"><a title="Line 872: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 872: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (session == <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 873</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
-<tr> <td class="numLine"> 874</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 875</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">final</span> String wrappedSessionName = <span class="string">"wrapped-session"</span>;</span></pre></td></tr>
-<tr> <td class="numLine"> 876</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Session nsSession;</pre></td></tr>
-<tr> <td class="numLineCover"> 877</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">synchronized</span> (session) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 878</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> nsSession = (Session) session.getAttribute(wrappedSessionName);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 879</td> <td class="nbHitsUncovered"><a title="Line 879: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 879: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (nsSession == <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 880</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> nsSession = <span class="keyword">new</span> NamespacedSession(session, <span class="string">"adaptor-impl-"</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 881</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> session.setAttribute(wrappedSessionName, nsSession);</span></pre></td></tr>
-<tr> <td class="numLine"> 882</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 457</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> String key = parts[0].trim();</pre></td></tr>
+<tr> <td class="numLineCover"> 458</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> String value = parts[1];</pre></td></tr>
+<tr> <td class="numLineCover"> 459</td> <td class="nbHitsCovered"><a title="Line 459: Conditional coverage 100% (2/2)."> 14</a></td> <td class="src"><pre class="src"> <a title="Line 459: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (key.equals(<span class="string">"type"</span>)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 460</td> <td class="nbHitsCovered"><a title="Line 460: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 460: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (value.equals(<span class="string">"group"</span>)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 461</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> isGroup = <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 462</td> <td class="nbHitsCovered"><a title="Line 462: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 462: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (value.equals(<span class="string">"user"</span>)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 463</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> isGroup = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLine"> 464</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 465</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Unknown type \"{0}\" as part of \"{1}\""</span>,</pre></td></tr>
+<tr> <td class="numLine"> 466</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {value, s});</pre></td></tr>
+<tr> <td class="numLineCover"> 467</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"> 468</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 883</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLineCover"> 884</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> nsSession;</span></pre></td></tr>
-<tr> <td class="numLine"> 885</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 469</td> <td class="nbHitsCovered"><a title="Line 469: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 469: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (key.equals(<span class="string">"name"</span>)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 470</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> name = value;</pre></td></tr>
+<tr> <td class="numLineCover"> 471</td> <td class="nbHitsCovered"><a title="Line 471: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 471: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (key.equals(<span class="string">"domain"</span>)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 472</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> domain = value;</pre></td></tr>
+<tr> <td class="numLineCover"> 473</td> <td class="nbHitsCovered"><a title="Line 473: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 473: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (key.equals(<span class="string">"namespace"</span>)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 474</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> namespace = value;</pre></td></tr>
+<tr> <td class="numLine"> 475</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 476</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Unknown key \"{0}\" as part of \"{1}\""</span>,</pre></td></tr>
+<tr> <td class="numLine"> 477</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {key, s});</pre></td></tr>
+<tr> <td class="numLineCover"> 478</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"> 479</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 480</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 886</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 887</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 888</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> setPollingIncrementalLister(</pre></td></tr>
-<tr> <td class="numLine"> 889</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> PollingIncrementalLister lister) {</pre></td></tr>
-<tr> <td class="numLineCover"> 890</td> <td class="nbHitsUncovered"><a title="Line 890: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 890: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!mutable) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 891</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">"After init()"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 892</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 893</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> pollingIncrementalLister = lister;</pre></td></tr>
-<tr> <td class="numLineCover"> 894</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 895</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 896</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 897</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> setAuthnAuthority(AuthnAuthority authnAuthority) {</pre></td></tr>
-<tr> <td class="numLineCover"> 898</td> <td class="nbHitsUncovered"><a title="Line 898: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 898: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!mutable) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 899</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">"After init()"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 900</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 901</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.authnAuthority = authnAuthority;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 902</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 903</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 904</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 905</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> setAuthzAuthority(AuthzAuthority authzAuthority) {</pre></td></tr>
-<tr> <td class="numLineCover"> 906</td> <td class="nbHitsUncovered"><a title="Line 906: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 906: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!mutable) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 907</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">"After init()"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 908</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 909</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.authzAuthority = authzAuthority;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 910</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 911</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 481</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> AclTransform.MatchData(isGroup, name, domain, namespace);</pre></td></tr>
+<tr> <td class="numLine"> 482</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 912</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 483</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 484</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 485</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Retrieve our default KeyPair from the default keystore. The key should have</span></pre></td></tr>
+<tr> <td class="numLine"> 486</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * the same password as the keystore.</span></pre></td></tr>
+<tr> <td class="numLine"> 487</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 488</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> KeyPair getKeyPair(String alias) <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 489</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String keystoreKey = <span class="string">"javax.net.ssl.keyStore"</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 490</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String keystorePasswordKey = <span class="string">"javax.net.ssl.keyStorePassword"</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 491</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> String keystore = System.getProperty(keystoreKey);</pre></td></tr>
+<tr> <td class="numLineCover"> 492</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> String keystoreType = System.getProperty(<span class="string">"javax.net.ssl.keyStoreType"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 493</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> KeyStore.getDefaultType());</pre></td></tr>
+<tr> <td class="numLineCover"> 494</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> String keystorePassword = System.getProperty(keystorePasswordKey);</pre></td></tr>
+<tr> <td class="numLine"> 495</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 496</td> <td class="nbHitsUncovered"><a title="Line 496: Conditional coverage 50% (1/2)."> 16</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 496: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (keystore == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 497</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException(<span class="string">"You must set "</span> + keystoreKey);</span></pre></td></tr>
+<tr> <td class="numLine"> 498</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 499</td> <td class="nbHitsUncovered"><a title="Line 499: Conditional coverage 50% (1/2)."> 16</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 499: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (keystorePassword == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 500</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException(<span class="string">"You must set "</span> + keystorePasswordKey);</span></pre></td></tr>
+<tr> <td class="numLine"> 501</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 502</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 503</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">return</span> getKeyPair(alias, keystore, keystoreType, keystorePassword);</pre></td></tr>
+<tr> <td class="numLine"> 504</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 505</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 506</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">static</span> KeyPair getKeyPair(String alias, String keystoreFile,</pre></td></tr>
+<tr> <td class="numLine"> 507</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String keystoreType, String keystorePasswordStr) <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLine"> 508</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> PrivateKey privateKey;</pre></td></tr>
+<tr> <td class="numLine"> 509</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> PublicKey publicKey;</pre></td></tr>
+<tr> <td class="numLine"> 510</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 511</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> KeyStore ks = KeyStore.getInstance(keystoreType);</pre></td></tr>
+<tr> <td class="numLineCover"> 512</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> InputStream ksis = <span class="keyword">new</span> FileInputStream(keystoreFile);</pre></td></tr>
+<tr> <td class="numLineCover"> 513</td> <td class="nbHitsUncovered"><a title="Line 513: Conditional coverage 50% (1/2)."> 18</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 513: Conditional coverage 50% (1/2)."> <span class="keyword">char</span>[] keystorePassword = keystorePasswordStr == <span class="keyword">null</span> ? <span class="keyword">null</span></a></span></pre></td></tr>
+<tr> <td class="numLine"> 514</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> : keystorePasswordStr.toCharArray();</pre></td></tr>
+<tr> <td class="numLine"> 515</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 516</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> ks.load(ksis, keystorePassword);</pre></td></tr>
+<tr> <td class="numLineCover"> 517</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (NoSuchAlgorithmException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 518</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 519</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (CertificateException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 520</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</span></pre></td></tr>
+<tr> <td class="numLine"> 521</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 522</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> ksis.close();</pre></td></tr>
+<tr> <td class="numLineCover"> 523</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 524</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> Key key = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 525</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 526</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> key = ks.getKey(alias, keystorePassword);</pre></td></tr>
+<tr> <td class="numLineCover"> 527</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"> 528</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"> 529</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (UnrecoverableKeyException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 530</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"> 531</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 532</td> <td class="nbHitsCovered"><a title="Line 532: Conditional coverage 100% (2/2)."> 18</a></td> <td class="src"><pre class="src"> <a title="Line 532: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (key == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 533</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Could not find key for alias '"</span></pre></td></tr>
+<tr> <td class="numLine"> 534</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + alias + <span class="string">"'"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 535</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 536</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> privateKey = (PrivateKey) key;</pre></td></tr>
+<tr> <td class="numLineCover"> 537</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> publicKey = ks.getCertificate(alias).getPublicKey();</pre></td></tr>
+<tr> <td class="numLineCover"> 538</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (KeyStoreException ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 539</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 540</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 541</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> KeyPair(publicKey, privateKey);</pre></td></tr>
+<tr> <td class="numLine"> 542</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 543</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 544</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Useful as a separate method during testing.</span></pre></td></tr>
+<tr> <td class="numLine"> 545</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">void</span> bootstrapOpenSaml() {</pre></td></tr>
+<tr> <td class="numLine"> 546</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 547</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> DefaultBootstrap.bootstrap();</pre></td></tr>
+<tr> <td class="numLineCover"> 548</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (ConfigurationException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 549</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"> 550</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 551</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 552</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 553</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 554</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Stops servicing incoming requests, allowing up to {@code maxDelay} seconds</span></pre></td></tr>
+<tr> <td class="numLine"> 555</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * for things to shutdown. After called, no requests will be sent to the</span></pre></td></tr>
+<tr> <td class="numLine"> 556</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Adaptor.</span></pre></td></tr>
+<tr> <td class="numLine"> 557</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 558</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return {@code true} if shutdown cleanly, {@code false} if requests may</span></pre></td></tr>
+<tr> <td class="numLine"> 559</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * still be processing</span></pre></td></tr>
+<tr> <td class="numLine"> 560</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 561</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="keyword">boolean</span> stop(<span class="keyword">long</span> time, TimeUnit unit) {</pre></td></tr>
+<tr> <td class="numLineCover"> 562</td> <td class="nbHitsCovered"> 31</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> clean = <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 563</td> <td class="nbHitsCovered"><a title="Line 563: Conditional coverage 100% (2/2)."> 31</a></td> <td class="src"><pre class="src"> <a title="Line 563: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (adaptorContext != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 564</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> adaptorContext.freeze();</pre></td></tr>
+<tr> <td class="numLine"> 565</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 566</td> <td class="nbHitsCovered"><a title="Line 566: Conditional coverage 100% (2/2)."> 31</a></td> <td class="src"><pre class="src"> <a title="Line 566: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (scope != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 567</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> scope.close();</pre></td></tr>
+<tr> <td class="numLineCover"> 568</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> scope = <span class="keyword">new</span> HttpServerScope(</pre></td></tr>
+<tr> <td class="numLine"> 569</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> scope.getHttpServer(), scope.getContextPrefix());</pre></td></tr>
+<tr> <td class="numLine"> 570</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 571</td> <td class="nbHitsCovered"><a title="Line 571: Conditional coverage 100% (2/2)."> 31</a></td> <td class="src"><pre class="src"> <a title="Line 571: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (scheduleExecutor != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLine"> 572</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Post-Adaptor.init() resources need to be stopped.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 573</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> dashboardScope.close();</pre></td></tr>
+<tr> <td class="numLineCover"> 574</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> dashboardScope = <span class="keyword">new</span> HttpServerScope(</pre></td></tr>
+<tr> <td class="numLine"> 575</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> dashboardScope.getHttpServer(), dashboardScope.getContextPrefix());</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"> 577</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> scheduleExecutor.shutdownNow();</pre></td></tr>
+<tr> <td class="numLineCover"> 578</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> scheduleExecutor = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 579</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 580</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> backgroundExecutor.shutdownNow();</pre></td></tr>
+<tr> <td class="numLineCover"> 581</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> backgroundExecutor = <span class="keyword">null</span>;</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"> 15</td> <td class="src"><pre class="src"> scheduler = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 584</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> sendDocIdsFuture = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 585</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 586</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> docIdIncrementalPusher = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 587</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 588</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> dashboard.stop();</pre></td></tr>
+<tr> <td class="numLineCover"> 589</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> dashboard = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 590</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 591</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Clear references set by Adaptor via AdaptorContext.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 592</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> docIdFullPusher = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 593</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> docIdIncrementalPusher = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 594</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 595</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 596</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> clean = clean & waiter.shutdown(time, unit);</pre></td></tr>
+<tr> <td class="numLineCover"> 597</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"> 598</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"> 599</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> clean = <span class="keyword">false</span>;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 600</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 601</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> waiter = <span class="keyword">new</span> ShutdownWaiter();</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="numLineCover"> 603</td> <td class="nbHitsCovered"> 31</td> <td class="src"><pre class="src"> <span class="keyword">return</span> clean;</pre></td></tr>
+<tr> <td class="numLine"> 604</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 605</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 606</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 607</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Stop services necessary for handling outgoing requests. This call</span></pre></td></tr>
+<tr> <td class="numLine"> 608</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * invalidates the {@link AdaptorContext} returned from {@link #setup}.</span></pre></td></tr>
+<tr> <td class="numLine"> 609</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 610</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="keyword">void</span> teardown() {</pre></td></tr>
+<tr> <td class="numLineCover"> 611</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> scope = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 612</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> dashboardScope = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 613</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> keyPair = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 614</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> aclTransform = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 615</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> waiter = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 616</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 617</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Wait until after adaptor.destroy() to shutdown things accessible by</span></pre></td></tr>
+<tr> <td class="numLine"> 618</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// AdaptorContext, so that the AdaptorContext is usable until the very</span></pre></td></tr>
+<tr> <td class="numLine"> 619</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// end.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 620</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> secureValueCodec = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 621</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> sessionManager = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 622</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> docIdCodec = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 623</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> docIdSender = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 624</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> adaptorContext = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 625</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 626</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 627</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 628</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Ensure there is a push running right now. This schedules a new push if one</span></pre></td></tr>
+<tr> <td class="numLine"> 629</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * is not already running. Returns {@code true} if it starts a new push, and</span></pre></td></tr>
+<tr> <td class="numLine"> 630</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * {@code false} otherwise.</span></pre></td></tr>
+<tr> <td class="numLine"> 631</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 632</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> checkAndScheduleImmediatePushOfDocIds() {</pre></td></tr>
+<tr> <td class="numLineCover"> 633</td> <td class="nbHitsUncovered"><a title="Line 633: Conditional coverage 50% (1/2)."> 12</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 633: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (docIdFullPusher.isRunning()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 634</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 635</td> <td class="nbHits"> </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="comment">// This check-then-execute permits a race between checking and starting the</span></pre></td></tr>
+<tr> <td class="numLine"> 637</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// runnable, but it shouldn't be a major issue since the caller wanted a</span></pre></td></tr>
+<tr> <td class="numLine"> 638</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// push to start right now, and one "just started."</span></pre></td></tr>
+<tr> <td class="numLineCover"> 639</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> backgroundExecutor.execute(waiter.runnable(docIdFullPusher));</pre></td></tr>
+<tr> <td class="numLineCover"> 640</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="numLine"> 641</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 642</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 643</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 644</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Perform an push of incremental changes. This works only for adaptors that</span></pre></td></tr>
+<tr> <td class="numLine"> 645</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * support incremental polling (implements {@link PollingIncrementalLister}.</span></pre></td></tr>
+<tr> <td class="numLine"> 646</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 647</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="keyword">boolean</span> checkAndScheduleIncrementalPushOfDocIds() {</pre></td></tr>
+<tr> <td class="numLineCover"> 648</td> <td class="nbHitsUncovered"><a title="Line 648: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 648: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (docIdIncrementalPusher == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 649</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></pre></td></tr>
+<tr> <td class="numLine"> 650</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"This adaptor does not support incremental push"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 651</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 652</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 653</td> <td class="nbHitsUncovered"><a title="Line 653: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 653: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (docIdIncrementalPusher.isRunning()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 654</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 655</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 656</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// This permits a race between checking and starting the runnable, but it</span></pre></td></tr>
+<tr> <td class="numLine"> 657</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// shouldn't be a major issue since the caller wanted a push to start right</span></pre></td></tr>
+<tr> <td class="numLine"> 658</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// now, and one "just started."</span></pre></td></tr>
+<tr> <td class="numLineCover"> 659</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> backgroundExecutor.execute(waiter.runnable(docIdIncrementalPusher));</span></pre></td></tr>
+<tr> <td class="numLineCover"> 660</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">true</span>;</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 663</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">boolean</span> isAdaptorIncremental() {</pre></td></tr>
+<tr> <td class="numLineCover"> 664</td> <td class="nbHitsUncovered"><a title="Line 664: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 15</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 664: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (adaptorContext == <span class="keyword">null</span> || adaptorContext.mutable) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 665</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">"Can only be used after init()"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 666</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 667</td> <td class="nbHitsCovered"><a title="Line 667: Conditional coverage 100% (2/2)."> 15</a></td> <td class="src"><pre class="src"> <a title="Line 667: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> adaptorContext.pollingIncrementalLister != <span class="keyword">null</span>;</a></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="numLine"> 669</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 670</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">boolean</span> ensureLatestConfigLoaded() {</pre></td></tr>
+<tr> <td class="numLine"> 671</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 672</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> config.ensureLatestConfigLoaded();</pre></td></tr>
+<tr> <td class="numLineCover"> 673</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"> 674</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Error while trying to reload configuration"</span>,</span></pre></td></tr>
+<tr> <td class="numLine"> 675</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 676</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 677</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 678</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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"> <span class="keyword">synchronized</span> <span class="keyword">void</span> rescheduleFullListing(String schedule) {</pre></td></tr>
+<tr> <td class="numLineCover"> 681</td> <td class="nbHitsUncovered"><a title="Line 681: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 681: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (sendDocIdsFuture == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 682</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"> 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"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 685</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> scheduler.reschedule(sendDocIdsFuture, schedule);</pre></td></tr>
+<tr> <td class="numLineCover"> 686</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"> 687</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Invalid schedule pattern"</span>, ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 688</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 689</td> <td class="nbHitsCovered"> 1</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="numLine"> 691</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/** The adaptor instance being used. */</span></pre></td></tr>
+<tr> <td class="numLine"> 692</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Adaptor getAdaptor() {</pre></td></tr>
+<tr> <td class="numLineCover"> 693</td> <td class="nbHitsCovered"> 33</td> <td class="src"><pre class="src"> <span class="keyword">return</span> adaptor;</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"> HttpContext addFilters(HttpContext context) {</pre></td></tr>
+<tr> <td class="numLineCover"> 697</td> <td class="nbHitsCovered"> 77</td> <td class="src"><pre class="src"> context.getFilters().add(waiter.filter());</pre></td></tr>
+<tr> <td class="numLineCover"> 698</td> <td class="nbHitsCovered"> 77</td> <td class="src"><pre class="src"> context.getFilters().addAll(commonFilters);</pre></td></tr>
+<tr> <td class="numLineCover"> 699</td> <td class="nbHitsCovered"> 77</td> <td class="src"><pre class="src"> <span class="keyword">return</span> context;</pre></td></tr>
+<tr> <td class="numLine"> 700</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 701</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 702</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 703</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Runnable that calls {@link DocIdSender#pushDocIds}.</span></pre></td></tr>
+<tr> <td class="numLine"> 704</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 705</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> PushRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
+<tr> <td class="numLine"> 706</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ExceptionHandler handler;</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="numLineCover"> 708</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> <span class="keyword">public</span> PushRunnable(ExceptionHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 709</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.handler = handler;</pre></td></tr>
+<tr> <td class="numLineCover"> 710</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> }</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>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 713</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"> 714</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 715</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> docIdSender.pushFullDocIdsFromAdaptor(handler);</pre></td></tr>
+<tr> <td class="numLineCover"> 716</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (InterruptedException ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 717</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> Thread.currentThread().interrupt();</pre></td></tr>
+<tr> <td class="numLineCover"> 718</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 719</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 720</td> <td class="nbHits"> </td>
+ <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"> </pre></td></tr>
+<tr> <td class="numLine"> 722</td> <td class="nbHits"> </td>
+ <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"> * Runnable that performs incremental feed push.</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">class</span> IncrementalPushRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
+<tr> <td class="numLine"> 726</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ExceptionHandler handler;</pre></td></tr>
+<tr> <td class="numLine"> 727</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> PollingIncrementalLister incrementalLister;</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"> 729</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> IncrementalPushRunnable(PollingIncrementalLister incrementalLister,</pre></td></tr>
+<tr> <td class="numLineCover"> 730</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ExceptionHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 731</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.incrementalLister = incrementalLister;</pre></td></tr>
+<tr> <td class="numLineCover"> 732</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.handler = handler;</pre></td></tr>
+<tr> <td class="numLineCover"> 733</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</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"> 735</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 736</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"> 737</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 738</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> docIdSender.pushIncrementalDocIdsFromAdaptor(</pre></td></tr>
+<tr> <td class="numLine"> 739</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> incrementalLister, handler);</pre></td></tr>
+<tr> <td class="numLineCover"> 740</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"> 741</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"> 742</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"> 743</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Exception during incremental polling"</span>, ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 744</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 745</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</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="numLine"> 747</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 748</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 749</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Runnable that logs an error that {@link PushRunnable} is already executing.</span></pre></td></tr>
+<tr> <td class="numLine"> 750</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 751</td> <td class="nbHitsCovered"> 32</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> AlreadyRunningRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
+<tr> <td class="numLine"> 752</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 753</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"> 754</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"Skipping scheduled push of docIds. The previous invocation "</span></span></pre></td></tr>
+<tr> <td class="numLine"> 755</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"is still running."</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 756</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 757</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 758</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="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 760</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Runnable that when invoked executes the delegate with {@link</span></pre></td></tr>
+<tr> <td class="numLine"> 761</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * #backgroundExecutor} and then returns before completion. That implies that</span></pre></td></tr>
+<tr> <td class="numLine"> 762</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * uses of this class must ensure they do not add an instance directly to</span></pre></td></tr>
+<tr> <td class="numLine"> 763</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * {@link #backgroundExecutor}, otherwise an odd infinite loop will occur.</span></pre></td></tr>
+<tr> <td class="numLine"> 764</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 765</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> BackgroundRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
+<tr> <td class="numLine"> 766</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Runnable delegate;</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"> 16</td> <td class="src"><pre class="src"> <span class="keyword">public</span> BackgroundRunnable(Runnable delegate) {</pre></td></tr>
+<tr> <td class="numLineCover"> 769</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.delegate = delegate;</pre></td></tr>
+<tr> <td class="numLineCover"> 770</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> }</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="numLine"> 772</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 773</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"> 774</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Wrap with waiter.runnable() every time instead of in constructor to aid</span></pre></td></tr>
+<tr> <td class="numLine"> 775</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// auditing the code for "ShutdownWaiter correctness."</span></pre></td></tr>
+<tr> <td class="numLineCover"> 776</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> backgroundExecutor.execute(waiter.runnable(delegate));</pre></td></tr>
+<tr> <td class="numLineCover"> 777</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 778</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 779</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 780</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 781</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * This class is thread-safe.</span></pre></td></tr>
+<tr> <td class="numLine"> 782</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 783</td> <td class="nbHitsCovered"> 158</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> AdaptorContextImpl <span class="keyword">implements</span> AdaptorContext {</pre></td></tr>
+<tr> <td class="numLineCover"> 784</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> mutable = <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 785</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> ExceptionHandler fullExceptionHandler</pre></td></tr>
+<tr> <td class="numLine"> 786</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = ExceptionHandlers.defaultHandler();</pre></td></tr>
+<tr> <td class="numLineCover"> 787</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> ExceptionHandler incrExceptionHandler</pre></td></tr>
+<tr> <td class="numLine"> 788</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = ExceptionHandlers.defaultHandler();</pre></td></tr>
+<tr> <td class="numLineCover"> 789</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> List<StatusSource> statusSources</pre></td></tr>
+<tr> <td class="numLine"> 790</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = <span class="keyword">new</span> ArrayList<StatusSource>();</pre></td></tr>
+<tr> <td class="numLine"> 791</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> PollingIncrementalLister pollingIncrementalLister;</pre></td></tr>
+<tr> <td class="numLine"> 792</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> AuthnAuthority authnAuthority;</pre></td></tr>
+<tr> <td class="numLine"> 793</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> AuthzAuthority authzAuthority;</pre></td></tr>
+<tr> <td class="numLine"> 794</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 795</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">synchronized</span> <span class="keyword">void</span> freeze() {</pre></td></tr>
+<tr> <td class="numLineCover"> 796</td> <td class="nbHitsCovered"> 32</td> <td class="src"><pre class="src"> mutable = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 797</td> <td class="nbHitsCovered"> 32</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 798</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 799</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 800</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"> 801</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"> 802</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 803</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 804</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 805</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdPusher getDocIdPusher() {</pre></td></tr>
+<tr> <td class="numLineCover"> 806</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> docIdSender;</pre></td></tr>
+<tr> <td class="numLine"> 807</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 808</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 809</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 810</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AsyncDocIdPusher getAsyncDocIdPusher() {</pre></td></tr>
+<tr> <td class="numLineCover"> 811</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> asyncDocIdSender;</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="numLine"> 814</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 815</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdEncoder getDocIdEncoder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 816</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> docIdCodec;</pre></td></tr>
+<tr> <td class="numLine"> 817</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 818</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 819</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 820</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> addStatusSource(StatusSource source) {</pre></td></tr>
+<tr> <td class="numLineCover"> 821</td> <td class="nbHitsUncovered"><a title="Line 821: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 821: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!mutable) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 822</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">"After init()"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 823</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 824</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statusSources.add(source);</pre></td></tr>
+<tr> <td class="numLineCover"> 825</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 826</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 827</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 828</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> setGetDocIdsFullErrorHandler(</pre></td></tr>
+<tr> <td class="numLine"> 829</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ExceptionHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 830</td> <td class="nbHitsUncovered"><a title="Line 830: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 830: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!mutable) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 831</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">"After init()"</span>);</span></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="numLineCover"> 833</td> <td class="nbHitsUncovered"><a title="Line 833: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 833: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (handler == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 834</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</span></pre></td></tr>
+<tr> <td class="numLine"> 835</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 836</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> fullExceptionHandler = handler;</pre></td></tr>
+<tr> <td class="numLineCover"> 837</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 838</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 839</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 840</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> ExceptionHandler getGetDocIdsFullErrorHandler() {</pre></td></tr>
+<tr> <td class="numLineCover"> 841</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> fullExceptionHandler;</pre></td></tr>
+<tr> <td class="numLine"> 842</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 843</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 844</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 845</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> setGetDocIdsIncrementalErrorHandler(</pre></td></tr>
+<tr> <td class="numLine"> 846</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ExceptionHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 847</td> <td class="nbHitsUncovered"><a title="Line 847: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 847: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!mutable) {</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> IllegalStateException(<span class="string">"After init()"</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="nbHitsUncovered"><a title="Line 850: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 850: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (handler == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 851</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</span></pre></td></tr>
+<tr> <td class="numLine"> 852</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 853</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> incrExceptionHandler = handler;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 854</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 855</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 856</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 857</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> ExceptionHandler getGetDocIdsIncrementalErrorHandler() {</pre></td></tr>
+<tr> <td class="numLineCover"> 858</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> incrExceptionHandler;</span></pre></td></tr>
+<tr> <td class="numLine"> 859</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 860</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 861</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 862</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> SensitiveValueDecoder getSensitiveValueDecoder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 863</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> secureValueCodec;</pre></td></tr>
+<tr> <td class="numLine"> 864</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 865</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 866</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 867</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> HttpContext createHttpContext(String path,</pre></td></tr>
+<tr> <td class="numLine"> 868</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> HttpHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 869</td> <td class="nbHitsUncovered"><a title="Line 869: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 869: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!mutable) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 870</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">"After init()"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 871</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 872</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> addFilters(scope.createContext(path, handler));</pre></td></tr>
+<tr> <td class="numLine"> 873</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 874</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 875</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 876</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Session getUserSession(HttpExchange ex, <span class="keyword">boolean</span> create) {</pre></td></tr>
+<tr> <td class="numLineCover"> 877</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Session session = sessionManager.getSession(ex, create);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 878</td> <td class="nbHitsUncovered"><a title="Line 878: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 878: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (session == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 879</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 880</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 881</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">final</span> String wrappedSessionName = <span class="string">"wrapped-session"</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 882</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Session nsSession;</pre></td></tr>
+<tr> <td class="numLineCover"> 883</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">synchronized</span> (session) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 884</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> nsSession = (Session) session.getAttribute(wrappedSessionName);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 885</td> <td class="nbHitsUncovered"><a title="Line 885: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 885: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (nsSession == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 886</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> nsSession = <span class="keyword">new</span> NamespacedSession(session, <span class="string">"adaptor-impl-"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 887</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> session.setAttribute(wrappedSessionName, nsSession);</span></pre></td></tr>
+<tr> <td class="numLine"> 888</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 889</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 890</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> nsSession;</span></pre></td></tr>
+<tr> <td class="numLine"> 891</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 892</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 893</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 894</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> setPollingIncrementalLister(</pre></td></tr>
+<tr> <td class="numLine"> 895</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> PollingIncrementalLister lister) {</pre></td></tr>
+<tr> <td class="numLineCover"> 896</td> <td class="nbHitsUncovered"><a title="Line 896: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 896: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!mutable) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 897</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">"After init()"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 898</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 899</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> pollingIncrementalLister = lister;</pre></td></tr>
+<tr> <td class="numLineCover"> 900</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 901</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 902</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 903</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> setAuthnAuthority(AuthnAuthority authnAuthority) {</pre></td></tr>
+<tr> <td class="numLineCover"> 904</td> <td class="nbHitsUncovered"><a title="Line 904: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 904: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!mutable) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 905</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">"After init()"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 906</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 907</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.authnAuthority = authnAuthority;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 908</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 909</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 910</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 911</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> setAuthzAuthority(AuthzAuthority authzAuthority) {</pre></td></tr>
+<tr> <td class="numLineCover"> 912</td> <td class="nbHitsUncovered"><a title="Line 912: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 912: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!mutable) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 913</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">"After init()"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 914</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 915</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.authzAuthority = authzAuthority;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 916</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 917</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 918</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.HttpClientAdapter.html b/coverage/com.google.enterprise.adaptor.HttpClientAdapter.html
index 240317c..3e6411f 100644
--- a/coverage/com.google.enterprise.adaptor.HttpClientAdapter.html
+++ b/coverage/com.google.enterprise.adaptor.HttpClientAdapter.html
@@ -53,9 +53,9 @@
<tr> <td class="numLine"> 17</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.collect.ListMultimap;</pre></td></tr>
<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.secmgr.http.HttpClientInterface;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.http.HttpClientInterface;</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.google.enterprise.secmgr.http.HttpExchange;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.http.HttpExchange;</pre></td></tr>
<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.HttpExchanges.html b/coverage/com.google.enterprise.adaptor.HttpExchanges.html
index e182cd3..82fb972 100644
--- a/coverage/com.google.enterprise.adaptor.HttpExchanges.html
+++ b/coverage/com.google.enterprise.adaptor.HttpExchanges.html
@@ -294,8 +294,8 @@
<td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// TODO(ejona): use exchange to decide on response language</span></pre></td></tr>
-<tr> <td class="numLineCover"> 162</td> <td class="nbHitsCovered"> 50</td> <td class="src"><pre class="src"> cannedRespond(ex, code, <span class="string">"text/plain"</span>, response.toString());</pre></td></tr>
-<tr> <td class="numLineCover"> 163</td> <td class="nbHitsCovered"> 50</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 162</td> <td class="nbHitsCovered"> 49</td> <td class="src"><pre class="src"> cannedRespond(ex, code, <span class="string">"text/plain"</span>, response.toString());</pre></td></tr>
+<tr> <td class="numLineCover"> 163</td> <td class="nbHitsCovered"> 49</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="numLine"> 165</td> <td class="nbHits"> </td>
@@ -326,14 +326,14 @@
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> cannedRespond(HttpExchange ex, <span class="keyword">int</span> code,</pre></td></tr>
<tr> <td class="numLine"> 179</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> String contentType, String response) <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 180</td> <td class="nbHitsCovered"><a title="Line 180: Conditional coverage 100% (2/2)."> 64</a></td> <td class="src"><pre class="src"> <a title="Line 180: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="string">"HEAD"</span>.equals(ex.getRequestMethod())) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 180</td> <td class="nbHitsCovered"><a title="Line 180: Conditional coverage 100% (2/2)."> 63</a></td> <td class="src"><pre class="src"> <a title="Line 180: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="string">"HEAD"</span>.equals(ex.getRequestMethod())) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 181</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> respondToHead(ex, code, contentType);</pre></td></tr>
<tr> <td class="numLine"> 182</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 183</td> <td class="nbHitsCovered"> 63</td> <td class="src"><pre class="src"> respond(ex, code, contentType, response.getBytes(ENCODING));</pre></td></tr>
+<tr> <td class="numLineCover"> 183</td> <td class="nbHitsCovered"> 62</td> <td class="src"><pre class="src"> respond(ex, code, contentType, response.getBytes(ENCODING));</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="numLineCover"> 185</td> <td class="nbHitsCovered"> 64</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 185</td> <td class="nbHitsCovered"> 63</td> <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>
@@ -348,12 +348,12 @@
<td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">void</span> startResponse(HttpExchange ex, <span class="keyword">int</span> code,</pre></td></tr>
<tr> <td class="numLine"> 192</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> String contentType, <span class="keyword">boolean</span> hasBody) <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 193</td> <td class="nbHitsCovered"> 147</td> <td class="src"><pre class="src"> log.finest(<span class="string">"Starting response"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 194</td> <td class="nbHitsCovered"><a title="Line 194: Conditional coverage 100% (2/2)."> 147</a></td> <td class="src"><pre class="src"> <a title="Line 194: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (contentType != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 195</td> <td class="nbHitsCovered"> 99</td> <td class="src"><pre class="src"> ex.getResponseHeaders().set(<span class="string">"Content-Type"</span>, contentType);</pre></td></tr>
+<tr> <td class="numLineCover"> 193</td> <td class="nbHitsCovered"> 146</td> <td class="src"><pre class="src"> log.finest(<span class="string">"Starting response"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 194</td> <td class="nbHitsCovered"><a title="Line 194: Conditional coverage 100% (2/2)."> 146</a></td> <td class="src"><pre class="src"> <a title="Line 194: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (contentType != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 195</td> <td class="nbHitsCovered"> 98</td> <td class="src"><pre class="src"> ex.getResponseHeaders().set(<span class="string">"Content-Type"</span>, contentType);</pre></td></tr>
<tr> <td class="numLine"> 196</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 197</td> <td class="nbHitsCovered"><a title="Line 197: Conditional coverage 100% (2/2)."> 147</a></td> <td class="src"><pre class="src"> <a title="Line 197: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!hasBody) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 197</td> <td class="nbHitsCovered"><a title="Line 197: Conditional coverage 100% (2/2)."> 146</a></td> <td class="src"><pre class="src"> <a title="Line 197: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!hasBody) {</a></pre></td></tr>
<tr> <td class="numLine"> 198</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// No body. Required for HEAD requests</span></pre></td></tr>
<tr> <td class="numLineCover"> 199</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> ex.sendResponseHeaders(code, -1);</pre></td></tr>
@@ -361,10 +361,10 @@
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine"> 201</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Chuncked encoding</span></pre></td></tr>
-<tr> <td class="numLineCover"> 202</td> <td class="nbHitsCovered"> 137</td> <td class="src"><pre class="src"> ex.sendResponseHeaders(code, 0);</pre></td></tr>
+<tr> <td class="numLineCover"> 202</td> <td class="nbHitsCovered"> 136</td> <td class="src"><pre class="src"> ex.sendResponseHeaders(code, 0);</pre></td></tr>
<tr> <td class="numLine"> 203</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 204</td> <td class="nbHitsCovered"> 147</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 204</td> <td class="nbHitsCovered"> 146</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 205</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 206</td> <td class="nbHits"> </td>
@@ -379,21 +379,21 @@
<td class="src"><pre class="src"> <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"> 211</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"> 212</td> <td class="nbHitsCovered"><a title="Line 212: Conditional coverage 100% (2/2)."> 100</a></td> <td class="src"><pre class="src"> <a title="Line 212: Conditional coverage 100% (2/2)."> startResponse(ex, code, contentType, response != <span class="keyword">null</span>);</a></pre></td></tr>
-<tr> <td class="numLineCover"> 213</td> <td class="nbHitsCovered"><a title="Line 213: Conditional coverage 100% (2/2)."> 100</a></td> <td class="src"><pre class="src"> <a title="Line 213: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (response != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 214</td> <td class="nbHitsCovered"> 92</td> <td class="src"><pre class="src"> OutputStream responseBody = ex.getResponseBody();</pre></td></tr>
-<tr> <td class="numLineCover"> 215</td> <td class="nbHitsCovered"> 92</td> <td class="src"><pre class="src"> log.finest(<span class="string">"before writing response"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 216</td> <td class="nbHitsCovered"> 92</td> <td class="src"><pre class="src"> responseBody.write(response);</pre></td></tr>
-<tr> <td class="numLineCover"> 217</td> <td class="nbHitsCovered"> 92</td> <td class="src"><pre class="src"> responseBody.flush();</pre></td></tr>
+<tr> <td class="numLineCover"> 212</td> <td class="nbHitsCovered"><a title="Line 212: Conditional coverage 100% (2/2)."> 99</a></td> <td class="src"><pre class="src"> <a title="Line 212: Conditional coverage 100% (2/2)."> startResponse(ex, code, contentType, response != <span class="keyword">null</span>);</a></pre></td></tr>
+<tr> <td class="numLineCover"> 213</td> <td class="nbHitsCovered"><a title="Line 213: Conditional coverage 100% (2/2)."> 99</a></td> <td class="src"><pre class="src"> <a title="Line 213: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (response != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 214</td> <td class="nbHitsCovered"> 91</td> <td class="src"><pre class="src"> OutputStream responseBody = ex.getResponseBody();</pre></td></tr>
+<tr> <td class="numLineCover"> 215</td> <td class="nbHitsCovered"> 91</td> <td class="src"><pre class="src"> log.finest(<span class="string">"before writing response"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 216</td> <td class="nbHitsCovered"> 91</td> <td class="src"><pre class="src"> responseBody.write(response);</pre></td></tr>
+<tr> <td class="numLineCover"> 217</td> <td class="nbHitsCovered"> 91</td> <td class="src"><pre class="src"> responseBody.flush();</pre></td></tr>
<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// This shouldn't be needed, but without it one developer had trouble</span></pre></td></tr>
-<tr> <td class="numLineCover"> 219</td> <td class="nbHitsCovered"> 92</td> <td class="src"><pre class="src"> responseBody.close();</pre></td></tr>
-<tr> <td class="numLineCover"> 220</td> <td class="nbHitsCovered"> 92</td> <td class="src"><pre class="src"> log.finest(<span class="string">"after writing response"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 219</td> <td class="nbHitsCovered"> 91</td> <td class="src"><pre class="src"> responseBody.close();</pre></td></tr>
+<tr> <td class="numLineCover"> 220</td> <td class="nbHitsCovered"> 91</td> <td class="src"><pre class="src"> log.finest(<span class="string">"after writing response"</span>);</pre></td></tr>
<tr> <td class="numLine"> 221</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 222</td> <td class="nbHitsCovered"> 100</td> <td class="src"><pre class="src"> ex.close();</pre></td></tr>
-<tr> <td class="numLineCover"> 223</td> <td class="nbHitsCovered"> 100</td> <td class="src"><pre class="src"> log.finest(<span class="string">"after closing exchange"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 224</td> <td class="nbHitsCovered"> 100</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 222</td> <td class="nbHitsCovered"> 99</td> <td class="src"><pre class="src"> ex.close();</pre></td></tr>
+<tr> <td class="numLineCover"> 223</td> <td class="nbHitsCovered"> 99</td> <td class="src"><pre class="src"> log.finest(<span class="string">"after closing exchange"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 224</td> <td class="nbHitsCovered"> 99</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 225</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 226</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.InternalErrorFilter.html b/coverage/com.google.enterprise.adaptor.InternalErrorFilter.html
index 9b0b582..412d3a3 100644
--- a/coverage/com.google.enterprise.adaptor.InternalErrorFilter.html
+++ b/coverage/com.google.enterprise.adaptor.InternalErrorFilter.html
@@ -94,7 +94,7 @@
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> doFilter(HttpExchange ex, Filter.Chain chain) <span class="keyword">throws</span> IOException {</pre></td></tr>
<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> chain.doFilter(ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> chain.doFilter(ex);</pre></td></tr>
<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (Exception e) {</pre></td></tr>
<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// We want to send 500 Internal Error if the response headers have not</span></pre></td></tr>
@@ -122,8 +122,8 @@
<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"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 59</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 60</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 59</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 60</td> <td class="nbHitsCovered"> 5</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>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.Journal.html b/coverage/com.google.enterprise.adaptor.Journal.html
index 4d77ded..40be280 100644
--- a/coverage/com.google.enterprise.adaptor.Journal.html
+++ b/coverage/com.google.enterprise.adaptor.Journal.html
@@ -373,8 +373,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"> 214</td> <td class="nbHitsCovered"> 1025</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = timeProvider.currentTimeMillis();</pre></td></tr>
<tr> <td class="numLineCover"> 215</td> <td class="nbHitsCovered"> 1025</td> <td class="src"><pre class="src"> <span class="keyword">long</span> startTime = time;</pre></td></tr>
-<tr> <td class="numLineCover"> 216</td> <td class="nbHitsCovered"><a title="Line 216: Conditional coverage 100% (2/2)."> 194180</a></td> <td class="src"><pre class="src"> <a title="Line 216: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (startTime == time) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 217</td> <td class="nbHitsCovered"> 193155</td> <td class="src"><pre class="src"> time = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 216</td> <td class="nbHitsCovered"><a title="Line 216: Conditional coverage 100% (2/2)."> 205006</a></td> <td class="src"><pre class="src"> <a title="Line 216: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (startTime == time) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 217</td> <td class="nbHitsCovered"> 203981</td> <td class="src"><pre class="src"> time = timeProvider.currentTimeMillis();</pre></td></tr>
<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLineCover"> 219</td> <td class="nbHitsCovered"> 1025</td> <td class="src"><pre class="src"> <span class="keyword">return</span> time - startTime;</pre></td></tr>
@@ -777,14 +777,14 @@
<tr> <td class="numLine"> 473</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Check if the current Stat object is still valid to write to</span></pre></td></tr>
<tr> <td class="numLineCover"> 474</td> <td class="nbHitsCovered"><a title="Line 474: Conditional coverage 100% (2/2)."> 480</a></td> <td class="src"><pre class="src"> <a title="Line 474: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (pendingStatPeriodEnd > currentTime) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 475</td> <td class="nbHitsCovered"> 464</td> <td class="src"><pre class="src"> <span class="keyword">return</span> stats[currentStat];</pre></td></tr>
+<tr> <td class="numLineCover"> 475</td> <td class="nbHitsCovered"> 465</td> <td class="src"><pre class="src"> <span class="keyword">return</span> stats[currentStat];</pre></td></tr>
<tr> <td class="numLine"> 476</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 477</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Check if all the Stat objects are invalid. This occurs when the last</span></pre></td></tr>
<tr> <td class="numLine"> 478</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// request was a long time ago.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 479</td> <td class="nbHitsCovered"><a title="Line 479: Conditional coverage 100% (2/2)."> 16</a></td> <td class="src"><pre class="src"> <a title="Line 479: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentTime - pendingStatPeriodEnd</a></pre></td></tr>
+<tr> <td class="numLineCover"> 479</td> <td class="nbHitsCovered"><a title="Line 479: Conditional coverage 100% (2/2)."> 15</a></td> <td class="src"><pre class="src"> <a title="Line 479: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentTime - pendingStatPeriodEnd</a></pre></td></tr>
<tr> <td class="numLine"> 480</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> > snapshotDurationMs * stats.length) {</pre></td></tr>
<tr> <td class="numLineCover"> 481</td> <td class="nbHitsCovered"><a title="Line 481: Conditional coverage 100% (2/2)."> 403</a></td> <td class="src"><pre class="src"> <a title="Line 481: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < stats.length; i++) {</a></pre></td></tr>
@@ -797,14 +797,14 @@
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 487</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Walk through time to get the current Stat object</span></pre></td></tr>
-<tr> <td class="numLineCover"> 488</td> <td class="nbHitsCovered"><a title="Line 488: Conditional coverage 100% (2/2)."> 205</a></td> <td class="src"><pre class="src"> <a title="Line 488: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (pendingStatPeriodEnd <= currentTime) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 489</td> <td class="nbHitsCovered"> 189</td> <td class="src"><pre class="src"> currentStat++;</pre></td></tr>
-<tr> <td class="numLineCover"> 490</td> <td class="nbHitsCovered"> 189</td> <td class="src"><pre class="src"> currentStat %= stats.length;</pre></td></tr>
-<tr> <td class="numLineCover"> 491</td> <td class="nbHitsCovered"> 189</td> <td class="src"><pre class="src"> stats[currentStat].reset();</pre></td></tr>
-<tr> <td class="numLineCover"> 492</td> <td class="nbHitsCovered"> 189</td> <td class="src"><pre class="src"> pendingStatPeriodEnd += snapshotDurationMs;</pre></td></tr>
+<tr> <td class="numLineCover"> 488</td> <td class="nbHitsCovered"><a title="Line 488: Conditional coverage 100% (2/2)."> 203</a></td> <td class="src"><pre class="src"> <a title="Line 488: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (pendingStatPeriodEnd <= currentTime) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 489</td> <td class="nbHitsCovered"> 188</td> <td class="src"><pre class="src"> currentStat++;</pre></td></tr>
+<tr> <td class="numLineCover"> 490</td> <td class="nbHitsCovered"> 188</td> <td class="src"><pre class="src"> currentStat %= stats.length;</pre></td></tr>
+<tr> <td class="numLineCover"> 491</td> <td class="nbHitsCovered"> 188</td> <td class="src"><pre class="src"> stats[currentStat].reset();</pre></td></tr>
+<tr> <td class="numLineCover"> 492</td> <td class="nbHitsCovered"> 188</td> <td class="src"><pre class="src"> pendingStatPeriodEnd += snapshotDurationMs;</pre></td></tr>
<tr> <td class="numLine"> 493</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 494</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">return</span> stats[currentStat];</pre></td></tr>
+<tr> <td class="numLineCover"> 494</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> <span class="keyword">return</span> stats[currentStat];</pre></td></tr>
<tr> <td class="numLine"> 495</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 496</td> <td class="nbHits"> </td>
@@ -839,7 +839,7 @@
<td class="src"><pre class="src"> <span class="comment"> * as controlled by {@link Stats}.</span></pre></td></tr>
<tr> <td class="numLine"> 515</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 516</td> <td class="nbHitsCovered"> 585</td> <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">class</span> Stat <span class="keyword">implements</span> Cloneable {</pre></td></tr>
+<tr> <td class="numLineCover"> 516</td> <td class="nbHitsCovered"> 584</td> <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">class</span> Stat <span class="keyword">implements</span> Cloneable {</pre></td></tr>
<tr> <td class="numLine"> 517</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 518</td> <td class="nbHits"> </td>
@@ -903,13 +903,13 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 549</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> reset() {</pre></td></tr>
-<tr> <td class="numLineCover"> 550</td> <td class="nbHitsCovered"> 35027</td> <td class="src"><pre class="src"> requestProcessingsCount = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 551</td> <td class="nbHitsCovered"> 35027</td> <td class="src"><pre class="src"> requestProcessingsFailureCount = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 552</td> <td class="nbHitsCovered"> 35027</td> <td class="src"><pre class="src"> requestProcessingsDurationSum = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 553</td> <td class="nbHitsCovered"> 35027</td> <td class="src"><pre class="src"> requestProcessingsMaxDuration = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 554</td> <td class="nbHitsCovered"> 35027</td> <td class="src"><pre class="src"> requestProcessingsThroughput = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 555</td> <td class="nbHitsCovered"> 35027</td> <td class="src"><pre class="src"> gsaRetrievedDocument = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 556</td> <td class="nbHitsCovered"> 35027</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 550</td> <td class="nbHitsCovered"> 35026</td> <td class="src"><pre class="src"> requestProcessingsCount = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 551</td> <td class="nbHitsCovered"> 35026</td> <td class="src"><pre class="src"> requestProcessingsFailureCount = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 552</td> <td class="nbHitsCovered"> 35026</td> <td class="src"><pre class="src"> requestProcessingsDurationSum = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 553</td> <td class="nbHitsCovered"> 35026</td> <td class="src"><pre class="src"> requestProcessingsMaxDuration = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 554</td> <td class="nbHitsCovered"> 35026</td> <td class="src"><pre class="src"> requestProcessingsThroughput = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 555</td> <td class="nbHitsCovered"> 35026</td> <td class="src"><pre class="src"> gsaRetrievedDocument = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 556</td> <td class="nbHitsCovered"> 35026</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 557</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 558</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.LoggingFilter.html b/coverage/com.google.enterprise.adaptor.LoggingFilter.html
index 7867b86..6da3eff 100644
--- a/coverage/com.google.enterprise.adaptor.LoggingFilter.html
+++ b/coverage/com.google.enterprise.adaptor.LoggingFilter.html
@@ -94,12 +94,12 @@
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> doFilter(HttpExchange ex, Filter.Chain chain) <span class="keyword">throws</span> IOException {</pre></td></tr>
<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> log.fine(<span class="string">"beginning"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> logRequest(ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 43</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Processing context for request is {0}"</span>,</pre></td></tr>
+<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> log.fine(<span class="string">"beginning"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> logRequest(ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 43</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Processing context for request is {0}"</span>,</pre></td></tr>
<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> ex.getHttpContext().getHandler().getClass().getName());</pre></td></tr>
-<tr> <td class="numLineCover"> 45</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> chain.doFilter(ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 45</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> chain.doFilter(ex);</pre></td></tr>
<tr> <td class="numLineCover"> 46</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (RuntimeException e) {</pre></td></tr>
<tr> <td class="numLineCover"> 47</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Unexpected exception during request"</span>, e);</pre></td></tr>
<tr> <td class="numLineCover"> 48</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> e;</pre></td></tr>
@@ -108,15 +108,15 @@
<tr> <td class="numLineCover"> 51</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> e;</pre></td></tr>
<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 53</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> logResponse(ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 54</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> log.fine(<span class="string">"ending"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 55</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 53</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> logResponse(ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 54</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> log.fine(<span class="string">"ending"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 55</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 4</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="keyword">private</span> <span class="keyword">void</span> logRequest(HttpExchange ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 59</td> <td class="nbHitsUncovered"><a title="Line 59: Conditional coverage 50% (1/2)."> 7</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 59: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (log.isLoggable(Level.FINER)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 59</td> <td class="nbHitsUncovered"><a title="Line 59: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 59: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (log.isLoggable(Level.FINER)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover"> 60</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.FINER, <span class="string">"Received {1} request to {0}. Headers: '{'{2}'}'"</span>,</span></pre></td></tr>
<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {ex.getRequestURI(), ex.getRequestMethod(),</pre></td></tr>
@@ -124,12 +124,12 @@
<td class="src"><pre class="src"> getLoggableHeaders(ex.getRequestHeaders())});</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"> 7</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 64</td> <td class="nbHitsCovered"> 6</td> <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>
<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> logResponse(HttpExchange ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 67</td> <td class="nbHitsUncovered"><a title="Line 67: Conditional coverage 50% (1/2)."> 7</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 67: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (log.isLoggable(Level.FINER)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 67</td> <td class="nbHitsUncovered"><a title="Line 67: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 67: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (log.isLoggable(Level.FINER)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover"> 68</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.FINER, <span class="string">"Responded to {1} request {0}. Headers: '{'{2}'}'"</span>,</span></pre></td></tr>
<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {ex.getRequestURI(), ex.getRequestMethod(),</pre></td></tr>
@@ -137,7 +137,7 @@
<td class="src"><pre class="src"> getLoggableHeaders(ex.getResponseHeaders())});</pre></td></tr>
<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 72</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 72</td> <td class="nbHitsCovered"> 6</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>
diff --git a/coverage/com.google.enterprise.adaptor.Principal.html b/coverage/com.google.enterprise.adaptor.Principal.html
index e5249c3..a276d21 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"> 667</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"> 677</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"> 667</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)."> 667</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"> 677</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)."> 677</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"> 170</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)."> 505</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)."> 48</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)."> 507</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="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"> 457</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"> 463</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.RedirectHandler.html b/coverage/com.google.enterprise.adaptor.RedirectHandler.html
index 4870b9d..f646582 100644
--- a/coverage/com.google.enterprise.adaptor.RedirectHandler.html
+++ b/coverage/com.google.enterprise.adaptor.RedirectHandler.html
@@ -12,7 +12,7 @@
<div class="separator"> </div>
<table class="report">
<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
- <tr><td><a href="com.google.enterprise.adaptor.RedirectHandler.html">RedirectHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">7</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:46px"><span class="text">6/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">1/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.0;</span>3</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.RedirectHandler.html">RedirectHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">10</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:23px"><span class="text">3/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.0;</span>3</td></tr>
</table>
<div class="separator"> </div>
@@ -92,11 +92,11 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 39</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"> 40</td> <td class="nbHitsUncovered"><a title="Line 40: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 40: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!ex.getRequestURI().getPath().equals(ex.getHttpContext().getPath())) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> HttpExchanges.cannedRespond(ex, HttpURLConnection.HTTP_NOT_FOUND,</pre></td></tr>
+<tr> <td class="numLineCover"> 40</td> <td class="nbHitsUncovered"><a title="Line 40: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 40: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!ex.getRequestURI().getPath().equals(ex.getHttpContext().getPath())) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 41</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HttpExchanges.cannedRespond(ex, HttpURLConnection.HTTP_NOT_FOUND,</span></pre></td></tr>
<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> Translation.HTTP_NOT_FOUND);</pre></td></tr>
-<tr> <td class="numLineCover"> 43</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 43</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"> 44</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.SamlBatchAuthzHandler.html b/coverage/com.google.enterprise.adaptor.SamlBatchAuthzHandler.html
index 3ecaebc..2b8ae97 100644
--- a/coverage/com.google.enterprise.adaptor.SamlBatchAuthzHandler.html
+++ b/coverage/com.google.enterprise.adaptor.SamlBatchAuthzHandler.html
@@ -52,11 +52,11 @@
<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.enterprise.secmgr.saml.HTTPSOAP11MultiContextDecoder;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextDecoder;</pre></td></tr>
<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.secmgr.saml.HTTPSOAP11MultiContextEncoder;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextEncoder;</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.google.enterprise.secmgr.saml.OpenSamlUtil;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil;</pre></td></tr>
<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.SamlIdentityProvider.html b/coverage/com.google.enterprise.adaptor.SamlIdentityProvider.html
index fe23241..b13844a 100644
--- a/coverage/com.google.enterprise.adaptor.SamlIdentityProvider.html
+++ b/coverage/com.google.enterprise.adaptor.SamlIdentityProvider.html
@@ -54,41 +54,41 @@
<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> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeAssertion;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeAssertion;</pre></td></tr>
<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeAttribute;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeAttribute;</pre></td></tr>
<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeAttributeStatement;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeAttributeStatement;</pre></td></tr>
<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeAttributeValue;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeAttributeValue;</pre></td></tr>
<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeAudienceRestriction;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeAudienceRestriction;</pre></td></tr>
<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeAuthnStatement;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeAuthnStatement;</pre></td></tr>
<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeConditions;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeConditions;</pre></td></tr>
<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeResponse;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeResponse;</pre></td></tr>
<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeStatus;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeStatus;</pre></td></tr>
<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeStatusCode;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeStatusCode;</pre></td></tr>
<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeStatusMessage;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeStatusMessage;</pre></td></tr>
<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeSubject;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeSubject;</pre></td></tr>
<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeSubjectConfirmation;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeSubjectConfirmation;</pre></td></tr>
<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeSubjectConfirmationData;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeSubjectConfirmationData;</pre></td></tr>
<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.secmgr.saml.OpenSamlUtil.makeSuccessfulStatus;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeSuccessfulStatus;</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>
- <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.secmgr.saml.OpenSamlUtil;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil;</pre></td></tr>
<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.SamlServiceProvider.html b/coverage/com.google.enterprise.adaptor.SamlServiceProvider.html
index 6ca4459..8aa627a 100644
--- a/coverage/com.google.enterprise.adaptor.SamlServiceProvider.html
+++ b/coverage/com.google.enterprise.adaptor.SamlServiceProvider.html
@@ -54,13 +54,13 @@
<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"> <span class="keyword">import</span> com.google.enterprise.secmgr.authncontroller.ExportedState;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState;</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.google.enterprise.secmgr.http.HttpClientInterface;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.http.HttpClientInterface;</pre></td></tr>
<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.secmgr.modules.SamlClient;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.modules.SamlClient;</pre></td></tr>
<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.secmgr.servlets.ResponseParser;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.servlets.ResponseParser;</pre></td></tr>
<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.SecurityManagerConfig.html b/coverage/com.google.enterprise.adaptor.SecurityManagerConfig.html
index ceb33bc..1a2f0b0 100644
--- a/coverage/com.google.enterprise.adaptor.SecurityManagerConfig.html
+++ b/coverage/com.google.enterprise.adaptor.SecurityManagerConfig.html
@@ -51,9 +51,9 @@
<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.enterprise.secmgr.authncontroller.ExportedState;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState;</pre></td></tr>
<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.secmgr.config.ConfigSingleton;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.config.ConfigSingleton;</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.google.gson.GsonBuilder;</pre></td></tr>
<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.ShutdownWaiter.html b/coverage/com.google.enterprise.adaptor.ShutdownWaiter.html
index 7dab57c..6045408 100644
--- a/coverage/com.google.enterprise.adaptor.ShutdownWaiter.html
+++ b/coverage/com.google.enterprise.adaptor.ShutdownWaiter.html
@@ -124,8 +124,8 @@
<tr> <td class="numLineCover"> 53</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> stopped = <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Inform processing requests to shut down.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 55</td> <td class="nbHitsCovered"><a title="Line 55: Conditional coverage 100% (2/2)."> 36</a></td> <td class="src"><pre class="src"> <a title="Line 55: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Thread thread : processingThreads.toArray(<span class="keyword">new</span> Thread[0])) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> thread.interrupt();</pre></td></tr>
+<tr> <td class="numLineCover"> 55</td> <td class="nbHitsCovered"><a title="Line 55: Conditional coverage 100% (2/2)."> 33</a></td> <td class="src"><pre class="src"> <a title="Line 55: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Thread thread : processingThreads.toArray(<span class="keyword">new</span> Thread[0])) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> thread.interrupt();</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>
@@ -176,31 +176,31 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> processingStarting(Thread thread) <span class="keyword">throws</span> ShutdownException {</pre></td></tr>
-<tr> <td class="numLineCover"> 84</td> <td class="nbHitsCovered"><a title="Line 84: Conditional coverage 100% (2/2)."> 37</a></td> <td class="src"><pre class="src"> <a title="Line 84: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (thread == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 84</td> <td class="nbHitsCovered"><a title="Line 84: Conditional coverage 100% (2/2)."> 36</a></td> <td class="src"><pre class="src"> <a title="Line 84: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (thread == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 85</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</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"> <span class="comment">// Locks can throw exceptions.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 88</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> lock.readLock().lock();</pre></td></tr>
+<tr> <td class="numLineCover"> 88</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> lock.readLock().lock();</pre></td></tr>
<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 90</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> processingThreads.add(thread);</pre></td></tr>
+<tr> <td class="numLineCover"> 90</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> processingThreads.add(thread);</pre></td></tr>
<tr> <td class="numLineCover"> 91</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (RuntimeException e) {</span></pre></td></tr>
<tr> <td class="numLineCover"> 92</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> lock.readLock().unlock();</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> e;</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">catch</span> (Error e) {</span></pre></td></tr>
<tr> <td class="numLineCover"> 95</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> lock.readLock().unlock();</span></pre></td></tr>
<tr> <td class="numLineCover"> 96</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> e;</span></pre></td></tr>
-<tr> <td class="numLineCover"> 97</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 98</td> <td class="nbHitsCovered"><a title="Line 98: Conditional coverage 100% (2/2)."> 36</a></td> <td class="src"><pre class="src"> <a title="Line 98: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (stopped) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 97</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 98</td> <td class="nbHitsCovered"><a title="Line 98: Conditional coverage 100% (2/2)."> 35</a></td> <td class="src"><pre class="src"> <a title="Line 98: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (stopped) {</a></pre></td></tr>
<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Cleanup.</span></pre></td></tr>
<tr> <td class="numLineCover"> 100</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> processingCompleted(thread);</pre></td></tr>
<tr> <td class="numLineCover"> 101</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> ShutdownException();</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"> 103</td> <td class="nbHitsCovered"> 31</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 103</td> <td class="nbHitsCovered"> 30</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>
@@ -211,7 +211,7 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> processingCompleted(Thread thread) {</pre></td></tr>
-<tr> <td class="numLineCover"> 109</td> <td class="nbHitsCovered"><a title="Line 109: Conditional coverage 100% (2/2)."> 37</a></td> <td class="src"><pre class="src"> <a title="Line 109: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (thread == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 109</td> <td class="nbHitsCovered"><a title="Line 109: Conditional coverage 100% (2/2)."> 36</a></td> <td class="src"><pre class="src"> <a title="Line 109: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (thread == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 110</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</pre></td></tr>
<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
@@ -219,12 +219,12 @@
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Locks can throw exceptions.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 114</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> lock.readLock().unlock();</pre></td></tr>
+<tr> <td class="numLineCover"> 114</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> lock.readLock().unlock();</pre></td></tr>
<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 116</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> processingThreads.remove(Thread.currentThread());</pre></td></tr>
-<tr> <td class="numLineCover"> 117</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 116</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> processingThreads.remove(Thread.currentThread());</pre></td></tr>
+<tr> <td class="numLineCover"> 117</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
@@ -281,21 +281,21 @@
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> doFilter(HttpExchange ex, Filter.Chain chain)</pre></td></tr>
<tr> <td class="numLine"> 150</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 151</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> Thread thread = Thread.currentThread();</pre></td></tr>
+<tr> <td class="numLineCover"> 151</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> Thread thread = Thread.currentThread();</pre></td></tr>
<tr> <td class="numLine"> 152</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 153</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> processingStarting(thread);</pre></td></tr>
+<tr> <td class="numLineCover"> 153</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> processingStarting(thread);</pre></td></tr>
<tr> <td class="numLineCover"> 154</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (ShutdownException e) {</span></pre></td></tr>
<tr> <td class="numLineCover"> 155</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(e);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 156</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 156</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 158</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> chain.doFilter(ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 158</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> chain.doFilter(ex);</pre></td></tr>
<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 160</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> processingCompleted(thread);</pre></td></tr>
-<tr> <td class="numLineCover"> 161</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 162</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 160</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> processingCompleted(thread);</pre></td></tr>
+<tr> <td class="numLineCover"> 161</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 162</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 163</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 164</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.SystemTimeProvider.html b/coverage/com.google.enterprise.adaptor.SystemTimeProvider.html
index ed16fa9..ba0888b 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"> 106</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"> 192588</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"> 203414</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.Translation.html b/coverage/com.google.enterprise.adaptor.Translation.html
index d1dcb5e..ad6b91b 100644
--- a/coverage/com.google.enterprise.adaptor.Translation.html
+++ b/coverage/com.google.enterprise.adaptor.Translation.html
@@ -104,7 +104,7 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 56</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"> 57</td> <td class="nbHitsCovered"> 55</td> <td class="src"><pre class="src"> <span class="keyword">return</span> toString(Locale.getDefault());</pre></td></tr>
+<tr> <td class="numLineCover"> 57</td> <td class="nbHitsCovered"> 54</td> <td class="src"><pre class="src"> <span class="keyword">return</span> toString(Locale.getDefault());</pre></td></tr>
<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
@@ -119,8 +119,8 @@
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> String toString(Locale locale) {</pre></td></tr>
-<tr> <td class="numLineCover"> 65</td> <td class="nbHitsCovered"> 81</td> <td class="src"><pre class="src"> String localeClassStr = <span class="string">"com.google.enterprise.adaptor.TranslationStrings"</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 81</td> <td class="src"><pre class="src"> <span class="keyword">return</span> ResourceBundle.getBundle(localeClassStr, locale)</pre></td></tr>
+<tr> <td class="numLineCover"> 65</td> <td class="nbHitsCovered"> 80</td> <td class="src"><pre class="src"> String localeClassStr = <span class="string">"com.google.enterprise.adaptor.TranslationStrings"</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 80</td> <td class="src"><pre class="src"> <span class="keyword">return</span> ResourceBundle.getBundle(localeClassStr, locale)</pre></td></tr>
<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> .getString(name());</pre></td></tr>
<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.UserPrincipal.html b/coverage/com.google.enterprise.adaptor.UserPrincipal.html
index 130b769..f5b9686 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"> 1161</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"> 1165</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.WrapperAdaptor.html b/coverage/com.google.enterprise.adaptor.WrapperAdaptor.html
index 419f114..837d6bb 100644
--- a/coverage/com.google.enterprise.adaptor.WrapperAdaptor.html
+++ b/coverage/com.google.enterprise.adaptor.WrapperAdaptor.html
@@ -15,7 +15,7 @@
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">10</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:23px"><span class="text">3/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$GetContentsRequest</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$GetContentsResponse</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">8</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:85px"><span class="text">46/54</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperAdaptorContext</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">20</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:13px"><span class="text">3/23</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperAdaptorContext</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">21</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:12px"><span class="text">3/24</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperDocIdPusher</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">7</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/7</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperRequest</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperResponse</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">34</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/34</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
@@ -757,8 +757,8 @@
<tr> <td class="numLine"> 429</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 430</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdEncoder getDocIdEncoder() {</pre></td></tr>
-<tr> <td class="numLineCover"> 431</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getDocIdEncoder();</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AsyncDocIdPusher getAsyncDocIdPusher() {</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">return</span> context.getAsyncDocIdPusher();</span></pre></td></tr>
<tr> <td class="numLine"> 432</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 433</td> <td class="nbHits"> </td>
@@ -766,52 +766,52 @@
<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">void</span> addStatusSource(StatusSource source) {</pre></td></tr>
-<tr> <td class="numLineCover"> 436</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.addStatusSource(source);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 437</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdEncoder getDocIdEncoder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 436</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getDocIdEncoder();</span></pre></td></tr>
+<tr> <td class="numLine"> 437</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="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"> @Override</pre></td></tr>
<tr> <td class="numLine"> 440</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsFullErrorHandler(ExceptionHandler handler) {</pre></td></tr>
-<tr> <td class="numLineCover"> 441</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setGetDocIdsFullErrorHandler(handler);</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> addStatusSource(StatusSource source) {</pre></td></tr>
+<tr> <td class="numLineCover"> 441</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.addStatusSource(source);</span></pre></td></tr>
<tr> <td class="numLineCover"> 442</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></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"> @Override</pre></td></tr>
<tr> <td class="numLine"> 445</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> ExceptionHandler getGetDocIdsFullErrorHandler() {</pre></td></tr>
-<tr> <td class="numLineCover"> 446</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getGetDocIdsFullErrorHandler();</span></pre></td></tr>
-<tr> <td class="numLine"> 447</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsFullErrorHandler(ExceptionHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 446</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setGetDocIdsFullErrorHandler(handler);</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></pre></td></tr>
<tr> <td class="numLine"> 448</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 449</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 450</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsIncrementalErrorHandler(</pre></td></tr>
-<tr> <td class="numLine"> 451</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> ExceptionHandler handler) {</pre></td></tr>
-<tr> <td class="numLineCover"> 452</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setGetDocIdsIncrementalErrorHandler(handler);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 453</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 454</td> <td class="nbHits"> </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"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 456</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> ExceptionHandler getGetDocIdsIncrementalErrorHandler() {</pre></td></tr>
-<tr> <td class="numLineCover"> 457</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getGetDocIdsIncrementalErrorHandler();</span></pre></td></tr>
-<tr> <td class="numLine"> 458</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> ExceptionHandler getGetDocIdsFullErrorHandler() {</pre></td></tr>
+<tr> <td class="numLineCover"> 451</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getGetDocIdsFullErrorHandler();</span></pre></td></tr>
+<tr> <td class="numLine"> 452</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 453</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 454</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 455</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsIncrementalErrorHandler(</pre></td></tr>
+<tr> <td class="numLine"> 456</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ExceptionHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 457</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setGetDocIdsIncrementalErrorHandler(handler);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 458</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
<tr> <td class="numLine"> 459</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 460</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 461</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> SensitiveValueDecoder getSensitiveValueDecoder() {</pre></td></tr>
-<tr> <td class="numLineCover"> 462</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getSensitiveValueDecoder();</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> ExceptionHandler getGetDocIdsIncrementalErrorHandler() {</pre></td></tr>
+<tr> <td class="numLineCover"> 462</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getGetDocIdsIncrementalErrorHandler();</span></pre></td></tr>
<tr> <td class="numLine"> 463</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 464</td> <td class="nbHits"> </td>
@@ -819,8 +819,8 @@
<tr> <td class="numLine"> 465</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 466</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> HttpContext createHttpContext(String path, HttpHandler handler) {</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">return</span> context.createHttpContext(path, handler);</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> SensitiveValueDecoder getSensitiveValueDecoder() {</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">return</span> context.getSensitiveValueDecoder();</span></pre></td></tr>
<tr> <td class="numLine"> 468</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 469</td> <td class="nbHits"> </td>
@@ -828,8 +828,8 @@
<tr> <td class="numLine"> 470</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 471</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Session getUserSession(HttpExchange ex, <span class="keyword">boolean</span> create) {</pre></td></tr>
-<tr> <td class="numLineCover"> 472</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getUserSession(ex, create);</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> HttpContext createHttpContext(String path, HttpHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 472</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.createHttpContext(path, handler);</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>
@@ -837,28 +837,37 @@
<tr> <td class="numLine"> 475</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 476</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setPollingIncrementalLister(PollingIncrementalLister lister) {</pre></td></tr>
-<tr> <td class="numLineCover"> 477</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setPollingIncrementalLister(lister);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 478</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Session getUserSession(HttpExchange ex, <span class="keyword">boolean</span> create) {</pre></td></tr>
+<tr> <td class="numLineCover"> 477</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.getUserSession(ex, create);</span></pre></td></tr>
+<tr> <td class="numLine"> 478</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 479</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 480</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 481</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setAuthnAuthority(AuthnAuthority authnAuthority) {</pre></td></tr>
-<tr> <td class="numLineCover"> 482</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setAuthnAuthority(authnAuthority);</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setPollingIncrementalLister(PollingIncrementalLister lister) {</pre></td></tr>
+<tr> <td class="numLineCover"> 482</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setPollingIncrementalLister(lister);</span></pre></td></tr>
<tr> <td class="numLineCover"> 483</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
<tr> <td class="numLine"> 484</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 485</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 486</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setAuthzAuthority(AuthzAuthority authzAuthority) {</pre></td></tr>
-<tr> <td class="numLineCover"> 487</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setAuthzAuthority(authzAuthority);</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setAuthnAuthority(AuthnAuthority authnAuthority) {</pre></td></tr>
+<tr> <td class="numLineCover"> 487</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setAuthnAuthority(authnAuthority);</span></pre></td></tr>
<tr> <td class="numLineCover"> 488</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
<tr> <td class="numLine"> 489</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"> 490</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 491</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setAuthzAuthority(AuthzAuthority authzAuthority) {</pre></td></tr>
+<tr> <td class="numLineCover"> 492</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setAuthzAuthority(authzAuthority);</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></pre></td></tr>
+<tr> <td class="numLine"> 494</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 495</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html b/coverage/com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html
new file mode 100644
index 0000000..cd0354c
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html
@@ -0,0 +1,560 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html">ExportedState</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:78px"><span class="text">15/19</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html">ExportedState$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">1/1</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html">ExportedState$2</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">1/1</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html">ExportedState$Credentials</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">9</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:52px"><span class="text">10/19</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">12</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/12</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html">ExportedState$Credentials$LocalProxy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:40px"><span class="text">4/10</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html">ExportedState$LocalProxy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">7</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:46px"><span class="text">6/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">3/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2011 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.authncontroller;</pre></td></tr>
+<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.base.Objects;</pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.base.Preconditions;</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.google.common.collect.ImmutableMap;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.collect.ImmutableSet;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.config.ConfigSingleton;</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.json.ProxyTypeAdapter;</pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.json.TypeAdapters;</pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.json.TypeProxy;</pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.GsonBuilder;</pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.reflect.TypeToken;</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="keyword">import</span> javax.annotation.CheckReturnValue;</pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.Nonnegative;</pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.Nonnull;</pre></td></tr>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.Nullable;</pre></td></tr>
+<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.ParametersAreNonnullByDefault;</pre></td></tr>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.concurrent.Immutable;</pre></td></tr>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * This is the state exported from the security manager to the GSA after a</span></pre></td></tr>
+<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * successful authentication. It is also the format that the security manager</span></pre></td></tr>
+<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * accepts from client SAML providers if they choose to provide this</span></pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * information.</span></pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Immutable</pre></td></tr>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @ParametersAreNonnullByDefault</pre></td></tr>
+<tr> <td class="numLineCover"> 43</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> ExportedState {</pre></td></tr>
+<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String ATTRIBUTE_NAME = <span class="string">"SecurityManagerState"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnegative <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> CURRENT_VERSION = 1;</pre></td></tr>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnegative <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> MIN_VERSION = 1;</pre></td></tr>
+<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnegative <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> MAX_VERSION = 1;</pre></td></tr>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * This class represents simple credentials without the complex structure used</span></pre></td></tr>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * by the security manager.</span></pre></td></tr>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Immutable</pre></td></tr>
+<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @ParametersAreNonnullByDefault</pre></td></tr>
+<tr> <td class="numLine"> 55</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> <span class="keyword">class</span> Credentials {</pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> @Nonnull <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> Credentials EMPTY</pre></td></tr>
+<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = <span class="keyword">new</span> Credentials(<span class="keyword">null</span>, <span class="keyword">null</span>, <span class="keyword">null</span>, ImmutableSet.<String>of());</pre></td></tr>
+<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nullable <span class="keyword">private</span> <span class="keyword">final</span> String username;</pre></td></tr>
+<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nullable <span class="keyword">private</span> <span class="keyword">final</span> String domain;</pre></td></tr>
+<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nullable <span class="keyword">private</span> <span class="keyword">final</span> String password;</pre></td></tr>
+<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull <span class="keyword">private</span> <span class="keyword">final</span> ImmutableSet<String> groups;</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="keyword">private</span> Credentials(@Nullable String username, @Nullable String domain,</pre></td></tr>
+<tr> <td class="numLineCover"> 65</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> @Nullable String password, ImmutableSet<String> groups) {</pre></td></tr>
+<tr> <td class="numLineCover"> 66</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.username = username;</pre></td></tr>
+<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.domain = domain;</pre></td></tr>
+<tr> <td class="numLineCover"> 68</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.password = password;</pre></td></tr>
+<tr> <td class="numLineCover"> 69</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.groups = groups;</pre></td></tr>
+<tr> <td class="numLineCover"> 70</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 72</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>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets a new credentials instance.</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="numLine"> 75</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param username The username credential or {@code null}.</span></pre></td></tr>
+<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param domain The domain credential or {@code null}.</span></pre></td></tr>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param password The password credential or {@code null}.</span></pre></td></tr>
+<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param groups The group credentials.</span></pre></td></tr>
+<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return An immutable structure of the given credentials.</span></pre></td></tr>
+<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Credentials make(@Nullable String username, @Nullable String domain,</pre></td></tr>
+<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nullable String password, Iterable<String> groups) {</pre></td></tr>
+<tr> <td class="numLineCover"> 85</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> Credentials(username, domain, password, ImmutableSet.copyOf(groups));</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>
+<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"> * Gets a new credentials instance with no groups.</span></pre></td></tr>
+<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param username The username credential or {@code null}.</span></pre></td></tr>
+<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param domain The domain credential or {@code null}.</span></pre></td></tr>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param password The password credential or {@code null}.</span></pre></td></tr>
+<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return An immutable structure of the given credentials.</span></pre></td></tr>
+<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Credentials make(@Nullable String username, @Nullable String domain,</pre></td></tr>
+<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nullable String password) {</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">return</span> make(username, domain, password, ImmutableSet.<String>of());</span></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="numLine"> 102</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets this instance's username.</span></pre></td></tr>
+<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nullable</pre></td></tr>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getUsername() {</pre></td></tr>
+<tr> <td class="numLineCover"> 109</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> username;</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"> 111</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 112</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>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets this instance's domain.</span></pre></td></tr>
+<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nullable</pre></td></tr>
+<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getDomain() {</pre></td></tr>
+<tr> <td class="numLineCover"> 118</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> domain;</span></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="numLine"> 120</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets this instance's password.</span></pre></td></tr>
+<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nullable</pre></td></tr>
+<tr> <td class="numLine"> 126</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getPassword() {</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> password;</pre></td></tr>
+<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets this instance's groups as an immutable set.</span></pre></td></tr>
+<tr> <td class="numLine"> 132</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> ImmutableSet<String> getGroups() {</pre></td></tr>
+<tr> <td class="numLineCover"> 136</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> groups;</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>
+<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</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">boolean</span> equals(Object object) {</pre></td></tr>
+<tr> <td class="numLineCover"> 141</td> <td class="nbHitsUncovered"><a title="Line 141: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 141: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (object == <span class="keyword">this</span>) { <span class="keyword">return</span> <span class="keyword">true</span>; }</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 142</td> <td class="nbHitsUncovered"><a title="Line 142: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 142: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!(object <span class="keyword">instanceof</span> Credentials)) { <span class="keyword">return</span> <span class="keyword">false</span>; }</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 143</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Credentials other = (Credentials) object;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 144</td> <td class="nbHitsUncovered"><a title="Line 144: Conditional coverage 0% (0/8) [each condition: 0%, 0%, 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 144: Conditional coverage 0% (0/8) [each condition: 0%, 0%, 0%, 0%]."> <span class="keyword">return</span> Objects.equal(getUsername(), other.getUsername())</a></span></pre></td></tr>
+<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && Objects.equal(getDomain(), other.getDomain())</pre></td></tr>
+<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && Objects.equal(getPassword(), other.getPassword())</pre></td></tr>
+<tr> <td class="numLine"> 147</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && Objects.equal(getGroups(), other.getGroups());</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"> </pre></td></tr>
+<tr> <td class="numLine"> 150</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 151</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"> 152</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> Objects.hashCode(getUsername(), getDomain(), getPassword(), getGroups());</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 155</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 156</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"> 157</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> ConfigSingleton.getGson().toJson(<span class="keyword">this</span>);</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="numLine"> 159</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 160</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">class</span> LocalProxy <span class="keyword">implements</span> TypeProxy<Credentials> {</pre></td></tr>
+<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String username;</pre></td></tr>
+<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String domain;</pre></td></tr>
+<tr> <td class="numLine"> 163</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String password;</pre></td></tr>
+<tr> <td class="numLine"> 164</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ImmutableSet<String> groups;</pre></td></tr>
+<tr> <td class="numLine"> 165</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @SuppressWarnings(<span class="string">"unused"</span>)</pre></td></tr>
+<tr> <td class="numLineCover"> 167</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> LocalProxy() {</pre></td></tr>
+<tr> <td class="numLineCover"> 168</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</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>
+ <td class="src"><pre class="src"> @SuppressWarnings(<span class="string">"unused"</span>)</pre></td></tr>
+<tr> <td class="numLineCover"> 171</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LocalProxy(Credentials credentials) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 172</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> username = credentials.getUsername();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 173</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> domain = credentials.getDomain();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 174</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> password = credentials.getPassword();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 175</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> groups = credentials.getGroups();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 176</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 177</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 178</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 179</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Credentials build() {</pre></td></tr>
+<tr> <td class="numLineCover"> 180</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Credentials.make(username, domain, password, groups);</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>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 184</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 185</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnegative <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">int</span> version;</pre></td></tr>
+<tr> <td class="numLine"> 186</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnegative <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">long</span> timeStamp;</pre></td></tr>
+<tr> <td class="numLine"> 187</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull <span class="keyword">private</span> <span class="keyword">final</span> Credentials pviCredentials;</pre></td></tr>
+<tr> <td class="numLine"> 188</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull <span class="keyword">private</span> <span class="keyword">final</span> Credentials basicCredentials;</pre></td></tr>
+<tr> <td class="numLine"> 189</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull <span class="keyword">private</span> <span class="keyword">final</span> ImmutableMap<String, Credentials> connectorCredentials;</pre></td></tr>
+<tr> <td class="numLine"> 190</td> <td class="nbHits"> </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"> <span class="keyword">private</span> ExportedState(@Nonnegative <span class="keyword">int</span> version, @Nonnegative <span class="keyword">long</span> timeStamp,</pre></td></tr>
+<tr> <td class="numLine"> 192</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Credentials pviCredentials, Credentials basicCredentials,</pre></td></tr>
+<tr> <td class="numLineCover"> 193</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ImmutableMap<String, Credentials> connectorCredentials) {</pre></td></tr>
+<tr> <td class="numLineCover"> 194</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.version = version;</pre></td></tr>
+<tr> <td class="numLineCover"> 195</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.timeStamp = timeStamp;</pre></td></tr>
+<tr> <td class="numLineCover"> 196</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.pviCredentials = pviCredentials;</pre></td></tr>
+<tr> <td class="numLineCover"> 197</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.basicCredentials = basicCredentials;</pre></td></tr>
+<tr> <td class="numLineCover"> 198</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.connectorCredentials = connectorCredentials;</pre></td></tr>
+<tr> <td class="numLineCover"> 199</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 200</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 201</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 202</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets the time at which this state was frozen.</span></pre></td></tr>
+<tr> <td class="numLine"> 203</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 204</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 205</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnegative</pre></td></tr>
+<tr> <td class="numLine"> 206</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">long</span> getTimeStamp() {</pre></td></tr>
+<tr> <td class="numLineCover"> 207</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> timeStamp;</span></pre></td></tr>
+<tr> <td class="numLine"> 208</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 209</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 210</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 211</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets the credentials for the Primary Verified Identity (PVI).</span></pre></td></tr>
+<tr> <td class="numLine"> 212</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 214</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 215</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Credentials getPviCredentials() {</pre></td></tr>
+<tr> <td class="numLineCover"> 216</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> pviCredentials;</pre></td></tr>
+<tr> <td class="numLine"> 217</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 219</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 220</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * If the security manager is configured for HTTP Basic or NTLM</span></pre></td></tr>
+<tr> <td class="numLine"> 221</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * authentication, this gets the credentials for that mechanism.</span></pre></td></tr>
+<tr> <td class="numLine"> 222</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 223</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 224</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 225</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Credentials getBasicCredentials() {</pre></td></tr>
+<tr> <td class="numLineCover"> 226</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> basicCredentials;</span></pre></td></tr>
+<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 228</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 229</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 230</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * If the security manager is configured for connector authentication, this</span></pre></td></tr>
+<tr> <td class="numLine"> 231</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * gets the credentials corresponding to each configured connector.</span></pre></td></tr>
+<tr> <td class="numLine"> 232</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>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 234</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 235</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> ImmutableMap<String, Credentials> getConnectorCredentials() {</pre></td></tr>
+<tr> <td class="numLineCover"> 236</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> connectorCredentials;</span></pre></td></tr>
+<tr> <td class="numLine"> 237</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 238</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 239</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets a JSON string representation for this object.</span></pre></td></tr>
+<tr> <td class="numLine"> 241</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 242</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 244</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String toJsonString() {</pre></td></tr>
+<tr> <td class="numLineCover"> 245</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> ConfigSingleton.getGson().toJson(<span class="keyword">this</span>);</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="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 249</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Decodes a JSON string representation into an exported-state object.</span></pre></td></tr>
+<tr> <td class="numLine"> 250</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 251</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 252</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 253</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> ExportedState fromJsonString(String jsonString) {</pre></td></tr>
+<tr> <td class="numLineCover"> 254</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> ConfigSingleton.getGson().fromJson(jsonString, ExportedState.<span class="keyword">class</span>);</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"> </pre></td></tr>
+<tr> <td class="numLine"> 257</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> registerTypeAdapters(GsonBuilder builder) {</pre></td></tr>
+<tr> <td class="numLineCover"> 258</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> builder.registerTypeAdapter(Credentials.<span class="keyword">class</span>,</pre></td></tr>
+<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ProxyTypeAdapter.make(Credentials.<span class="keyword">class</span>, Credentials.LocalProxy.<span class="keyword">class</span>));</pre></td></tr>
+<tr> <td class="numLineCover"> 260</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> builder.registerTypeAdapter(ExportedState.<span class="keyword">class</span>,</pre></td></tr>
+<tr> <td class="numLine"> 261</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ProxyTypeAdapter.make(ExportedState.<span class="keyword">class</span>, LocalProxy.<span class="keyword">class</span>));</pre></td></tr>
+<tr> <td class="numLineCover"> 262</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> builder.registerTypeAdapter(<span class="keyword">new</span> TypeToken<ImmutableSet<String>>() {}.getType(),</pre></td></tr>
+<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> TypeAdapters.immutableSet());</pre></td></tr>
+<tr> <td class="numLineCover"> 264</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> builder.registerTypeAdapter(<span class="keyword">new</span> TypeToken<ImmutableMap<String, Credentials>>() {}.getType(),</pre></td></tr>
+<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> TypeAdapters.immutableMap());</pre></td></tr>
+<tr> <td class="numLineCover"> 266</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 267</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 268</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> <span class="keyword">class</span> LocalProxy <span class="keyword">implements</span> TypeProxy<ExportedState> {</pre></td></tr>
+<tr> <td class="numLine"> 269</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">int</span> version;</pre></td></tr>
+<tr> <td class="numLine"> 270</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">long</span> timeStamp;</pre></td></tr>
+<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Credentials pviCredentials;</pre></td></tr>
+<tr> <td class="numLine"> 272</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Credentials basicCredentials;</pre></td></tr>
+<tr> <td class="numLine"> 273</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ImmutableMap<String, Credentials> connectorCredentials;</pre></td></tr>
+<tr> <td class="numLine"> 274</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @SuppressWarnings(<span class="string">"unused"</span>)</pre></td></tr>
+<tr> <td class="numLineCover"> 276</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> LocalProxy() {</pre></td></tr>
+<tr> <td class="numLineCover"> 277</td> <td class="nbHitsCovered"> 1</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"> 279</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @SuppressWarnings(<span class="string">"unused"</span>)</pre></td></tr>
+<tr> <td class="numLineCover"> 280</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LocalProxy(ExportedState state) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 281</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> version = state.version;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 282</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> timeStamp = state.timeStamp;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 283</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> pviCredentials = state.getPviCredentials();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 284</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> basicCredentials = state.getBasicCredentials();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 285</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> connectorCredentials = state.getConnectorCredentials();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 286</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 287</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 288</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 289</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> ExportedState build() {</pre></td></tr>
+<tr> <td class="numLineCover"> 290</td> <td class="nbHitsUncovered"><a title="Line 290: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 290: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> Preconditions.checkArgument(version >= MIN_VERSION && version <= MAX_VERSION);</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 291</td> <td class="nbHitsUncovered"><a title="Line 291: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 291: Conditional coverage 50% (1/2)."> Preconditions.checkArgument(timeStamp >= 0);</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 292</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> ExportedState(version, timeStamp, pviCredentials, basicCredentials,</pre></td></tr>
+<tr> <td class="numLine"> 293</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ImmutableMap.copyOf(connectorCredentials));</pre></td></tr>
+<tr> <td class="numLine"> 294</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 295</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 296</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.common.AuthzStatus.html b/coverage/com.google.enterprise.adaptor.secmgr.common.AuthzStatus.html
new file mode 100644
index 0000000..7c91c47
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.common.AuthzStatus.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.common.AuthzStatus</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.common.AuthzStatus.html">AuthzStatus</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">8</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/8</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2010 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.common;</pre></td></tr>
+<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="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Authorization Status codes.</span></pre></td></tr>
+<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <ul></span></pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <li>{@code PERMIT} means that authorization is granted.</li></span></pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <li>{@code DENY} means that authorization is positively denied.</li></span></pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <li>{@code INDETERMINATE} means that permission is neither granted nor</span></pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * denied. If a consumer receives this code, it may decide to try other means</span></pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * to get a positive decision (i.e. {@code PERMIT} or {@code DENY}).</li></span></pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * </ul></span></pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</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 class="keyword">public</span> enum AuthzStatus {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 28</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> PERMIT(<span class="string">"Access PERMITTED"</span>),</span></pre></td></tr>
+<tr> <td class="numLineCover"> 29</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> DENY(<span class="string">"Access DENIED"</span>),</span></pre></td></tr>
+<tr> <td class="numLineCover"> 30</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> INDETERMINATE(<span class="string">"No access decision"</span>);</span></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"> <span class="keyword">private</span> <span class="keyword">final</span> String description;</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="numLineCover"> 34</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> AuthzStatus(String description) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 35</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.description = description;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 36</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</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>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getDescription() {</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">return</span> description;</span></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>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.common.SecurityManagerUtil.html b/coverage/com.google.enterprise.adaptor.secmgr.common.SecurityManagerUtil.html
new file mode 100644
index 0000000..349cf6e
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.common.SecurityManagerUtil.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.common.SecurityManagerUtil</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.common.SecurityManagerUtil.html">SecurityManagerUtil</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:57px"><span class="text">4/7</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">3/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.4;</span>1.4</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2009 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.common;</pre></td></tr>
+<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> java.util.logging.Logger;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.concurrent.ThreadSafe;</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <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="comment"> * Utilities useful throughout the security manager.</span></pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @ThreadSafe</pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> SecurityManagerUtil {</pre></td></tr>
+<tr> <td class="numLineCover"> 28</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 LOGGER = Logger.getLogger(SecurityManagerUtil.<span class="keyword">class</span>.getName());</pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// don't instantiate</span></pre></td></tr>
+<tr> <td class="numLineCover"> 31</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> SecurityManagerUtil() {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 32</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> UnsupportedOperationException();</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>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Annotate a log message with a given session ID. This should be implemented</span></pre></td></tr>
+<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * in the session manager, but can't be due to cyclic build dependencies.</span></pre></td></tr>
+<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param sessionId The session ID to annotate the message with.</span></pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param message The log message to annotate.</span></pre></td></tr>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The annotated log message.</span></pre></td></tr>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> String sessionLogMessage(String sessionId, String message) {</pre></td></tr>
+<tr> <td class="numLineCover"> 44</td> <td class="nbHitsUncovered"><a title="Line 44: Conditional coverage 50% (1/2)."> 15</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 44: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> <span class="string">"sid "</span> + ((sessionId != <span class="keyword">null</span>) ? sessionId : <span class="string">"?"</span>) + <span class="string">": "</span> + message;</a></span></pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Is a given remote "before" time valid? In other words, is it possible that</span></pre></td></tr>
+<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * the remote "before" time is less than or equal to the remote "now" time?</span></pre></td></tr>
+<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param before A before time from a remote host.</span></pre></td></tr>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param now The current time on this host.</span></pre></td></tr>
+<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return True if the before time might not have passed on the remote host.</span></pre></td></tr>
+<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">boolean</span> isRemoteBeforeTimeValid(<span class="keyword">long</span> before, <span class="keyword">long</span> now) {</pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsUncovered"><a title="Line 56: Conditional coverage 50% (1/2)."> 7</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 56: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> before - CLOCK_SKEW_TIME <= now;</a></span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Is a given remote "on or after" time valid? In other words, is it possible</span></pre></td></tr>
+<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * that the remote "on or after" time is greater than the remote "now" time?</span></pre></td></tr>
+<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param onOrAfter An on-or-after time from a remote host.</span></pre></td></tr>
+<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param now The current time on this host.</span></pre></td></tr>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return True if the remote time might have passed on the remote host.</span></pre></td></tr>
+<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">boolean</span> isRemoteOnOrAfterTimeValid(<span class="keyword">long</span> onOrAfter, <span class="keyword">long</span> now) {</pre></td></tr>
+<tr> <td class="numLineCover"> 68</td> <td class="nbHitsUncovered"><a title="Line 68: Conditional coverage 50% (1/2)."> 8</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 68: Conditional coverage 50% (1/2)."> <span class="keyword">return</span> onOrAfter + CLOCK_SKEW_TIME > now;</a></span></pre></td></tr>
+<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @VisibleForTesting</pre></td></tr>
+<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">long</span> getClockSkewTime() {</pre></td></tr>
+<tr> <td class="numLineCover"> 73</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> CLOCK_SKEW_TIME;</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> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">long</span> CLOCK_SKEW_TIME = 5000;</pre></td></tr>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.common.Stringify.html b/coverage/com.google.enterprise.adaptor.secmgr.common.Stringify.html
new file mode 100644
index 0000000..07ec734
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.common.Stringify.html
@@ -0,0 +1,315 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.common.Stringify</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.common.Stringify.html">Stringify</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">46</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/46</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">19</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/19</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.142857142857143;</span>3.143</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.common.Stringify.html">Stringify$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/2</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.142857142857143;</span>3.143</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2010 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.common;</pre></td></tr>
+<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.base.Function;</pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.base.Joiner;</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.google.common.base.Preconditions;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.collect.Iterables;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </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.util.Arrays;</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>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.CheckReturnValue;</pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.Nonnull;</pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.Nullable;</pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.ParametersAreNonnullByDefault;</pre></td></tr>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static methods for converting objects to strings. This is useful both for</span></pre></td></tr>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * logging and for assertion failure messages in tests.</span></pre></td></tr>
+<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @author Chris Hanson</span></pre></td></tr>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @ParametersAreNonnullByDefault</pre></td></tr>
+<tr> <td class="numLineCover"> 36</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> Stringify {</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>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Generates a display string for a given object. Reformats strings in Java</span></pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * syntax, to eliminate ambiguities. This is useful when generating</span></pre></td></tr>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * expectation strings.</span></pre></td></tr>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param object The object to generate a string for.</span></pre></td></tr>
+<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A string representation of the object.</span></pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> String object(@Nullable Object object) {</pre></td></tr>
+<tr> <td class="numLineCover"> 49</td> <td class="nbHitsUncovered"><a title="Line 49: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 49: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (object == <span class="keyword">null</span>) {</a></span></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">return</span> <span class="string">"null"</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 52</td> <td class="nbHitsUncovered"><a title="Line 52: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 52: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (object <span class="keyword">instanceof</span> String) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 53</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String string = (String) object;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 54</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> StringBuilder builder = <span class="keyword">new</span> StringBuilder();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 55</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">'"'</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsUncovered"><a title="Line 56: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 56: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < string.length(); i += 1) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 57</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">char</span> c = string.charAt(i);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 58</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> writeChar(c, <span class="string">'"'</span>, builder);</span></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"> 60</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">'"'</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 61</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> builder.toString();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 62</td> <td class="nbHitsUncovered"><a title="Line 62: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 62: Conditional coverage 0% (0/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (object <span class="keyword">instanceof</span> Character) {</a></span></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">char</span> c = (Character) object;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 64</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> StringBuilder builder = <span class="keyword">new</span> StringBuilder();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 65</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">"'"</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"> writeChar(c, <span class="string">'\''</span>, builder);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 67</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">"'"</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"> <span class="keyword">return</span> builder.toString();</span></pre></td></tr>
+<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 70</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> object.toString();</span></pre></td></tr>
+<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="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"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> writeChar(<span class="keyword">char</span> c, <span class="keyword">char</span> quote, StringBuilder builder) {</pre></td></tr>
+<tr> <td class="numLineCover"> 74</td> <td class="nbHitsUncovered"><a title="Line 74: Conditional coverage 0% (0/7)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 74: Conditional coverage 0% (0/7)."> <span class="keyword">switch</span> (c) {</a></span></pre></td></tr>
+<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> <span class="string">'\b'</span>:</pre></td></tr>
+<tr> <td class="numLineCover"> 76</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">"\\b"</span>);</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">break</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> <span class="string">'\t'</span>:</pre></td></tr>
+<tr> <td class="numLineCover"> 79</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">"\\t"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 80</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"> 81</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> <span class="string">'\n'</span>:</pre></td></tr>
+<tr> <td class="numLineCover"> 82</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">"\\n"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 83</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"> 84</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> <span class="string">'\f'</span>:</pre></td></tr>
+<tr> <td class="numLineCover"> 85</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">"\\f"</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">break</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> <span class="string">'\r'</span>:</pre></td></tr>
+<tr> <td class="numLineCover"> 88</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">"\\r"</span>);</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">break</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> <span class="string">'\\'</span>:</pre></td></tr>
+<tr> <td class="numLineCover"> 91</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">"\\\\"</span>);</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">break</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">default</span>:</pre></td></tr>
+<tr> <td class="numLineCover"> 94</td> <td class="nbHitsUncovered"><a title="Line 94: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 94: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (c == quote) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 95</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">'\\'</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 96</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(c);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 97</td> <td class="nbHitsUncovered"><a title="Line 97: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 97: Conditional coverage 0% (0/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (c < <span class="string">' '</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 98</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(String.format(<span class="string">"\\u%04x"</span>, (<span class="keyword">int</span>) c));</span></pre></td></tr>
+<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 100</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(c);</span></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="numLine"> 102</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">break</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="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"> 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"> <span class="comment"> * A function that maps an object to a string.</span></pre></td></tr>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @see #object</span></pre></td></tr>
+<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLineCover"> 111</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> Function<Object, String> OBJECT_FUNCTION =</span></pre></td></tr>
+<tr> <td class="numLineCover"> 112</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">new</span> Function<Object, String>() {</span></pre></td></tr>
+<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String apply(Object o) {</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">return</span> object(o);</span></pre></td></tr>
+<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> };</pre></td></tr>
+<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Generates a display string for a method invocation.</span></pre></td></tr>
+<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param methodName The name of the method being invoked.</span></pre></td></tr>
+<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param operands The objects being passed as arguments to the method.</span></pre></td></tr>
+<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A string representation of the invocation.</span></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"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 127</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> String invocation(String methodName, Iterable<?> operands) {</pre></td></tr>
+<tr> <td class="numLineCover"> 129</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Preconditions.checkNotNull(methodName);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 130</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> methodName + <span class="string">"("</span> + objects(operands) + <span class="string">")"</span>;</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="numLine"> 132</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Generates a display string for a method invocation.</span></pre></td></tr>
+<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param methodName The name of the method being invoked.</span></pre></td></tr>
+<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param operands The objects being passed as arguments to the method.</span></pre></td></tr>
+<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A string representation of the invocation.</span></pre></td></tr>
+<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 142</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> String invocation(String methodName, Object... operands) {</pre></td></tr>
+<tr> <td class="numLineCover"> 143</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> invocation(methodName, Arrays.asList(operands));</span></pre></td></tr>
+<tr> <td class="numLine"> 144</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 147</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Generates a display string for a sequence of objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 148</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 149</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param elements A sequence of objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 150</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A string representation of the given sequence.</span></pre></td></tr>
+<tr> <td class="numLine"> 151</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 152</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 153</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 154</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> String objects(Iterable<?> elements) {</pre></td></tr>
+<tr> <td class="numLineCover"> 155</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> Joiner.on(<span class="string">", "</span>).join(Iterables.transform(elements, OBJECT_FUNCTION));</span></pre></td></tr>
+<tr> <td class="numLine"> 156</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 158</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Generates a display string for a sequence of objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param elements A sequence of objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A string representation of the given sequence.</span></pre></td></tr>
+<tr> <td class="numLine"> 163</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 164</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @CheckReturnValue</pre></td></tr>
+<tr> <td class="numLine"> 165</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> String objects(Object... elements) {</pre></td></tr>
+<tr> <td class="numLineCover"> 167</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> objects(Arrays.asList(elements));</span></pre></td></tr>
+<tr> <td class="numLine"> 168</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 169</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.common.XmlUtil.html b/coverage/com.google.enterprise.adaptor.secmgr.common.XmlUtil.html
new file mode 100644
index 0000000..b30d5ca
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.common.XmlUtil.html
@@ -0,0 +1,411 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.common.XmlUtil</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.common.XmlUtil.html">XmlUtil</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">21</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:53px"><span class="text">24/45</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.8571428571428572;</span>1.857</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2009 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.common;</pre></td></tr>
+<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> org.w3c.dom.DOMConfiguration;</pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.w3c.dom.DOMImplementation;</pre></td></tr>
+<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.w3c.dom.Document;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.w3c.dom.DocumentType;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.w3c.dom.bootstrap.DOMImplementationRegistry;</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.w3c.dom.ls.DOMImplementationLS;</pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.w3c.dom.ls.LSException;</pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.w3c.dom.ls.LSOutput;</pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.w3c.dom.ls.LSSerializer;</pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.io.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.io.StringWriter;</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.io.Writer;</pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.xml.namespace.QName;</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="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Utilities for manipulating XML files.</span></pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> XmlUtil {</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>
+ <td class="src"><pre class="src"> <span class="comment">// DOM and XML constants.</span></pre></td></tr>
+<tr> <td class="numLine"> 39</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 DOM_FEATURES_XML = <span class="string">"XML 3.0"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 40</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 DOM_FEATURES_LOAD_SAVE = <span class="string">"LS"</span>;</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">static</span> <span class="keyword">final</span> String DOM_CONFIG_COMMENTS = <span class="string">"comments"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 43</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 DOM_CONFIG_ELEMENT_CONTENT_WHITESPACE = <span class="string">"element-content-whitespace"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 44</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 DOM_CONFIG_CANONICAL_FORM = <span class="string">"canonical-form"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String XML_VERSION = <span class="string">"1.0"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> DOMImplementation domImpl;</pre></td></tr>
+<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> DOMImplementationLS domImplLs;</pre></td></tr>
+<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Construct an XmlUtil with a default DOM implementation.</span></pre></td></tr>
+<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"> 54</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> XmlUtil make() {</pre></td></tr>
+<tr> <td class="numLineCover"> 55</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> DOMImplementationRegistry registry = makeRegistry();</pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> XmlUtil(</pre></td></tr>
+<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> registry.getDOMImplementation(DOM_FEATURES_XML),</pre></td></tr>
+<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> DOMImplementationLS.<span class="keyword">class</span>.cast(registry.getDOMImplementation(DOM_FEATURES_LOAD_SAVE)));</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="numLine"> 60</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"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> XmlUtil INSTANCE = make();</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"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">synchronized</span> XmlUtil getInstance() {</pre></td></tr>
+<tr> <td class="numLineCover"> 64</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> INSTANCE;</pre></td></tr>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> DOMImplementationRegistry makeRegistry() {</pre></td></tr>
+<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 69</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> DOMImplementationRegistry.newInstance();</pre></td></tr>
+<tr> <td class="numLineCover"> 70</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (ClassCastException e) {</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">throw</span> <span class="keyword">new</span> IllegalStateException(e);</span></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">catch</span> (ClassNotFoundException e) {</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 class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 74</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InstantiationException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 75</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(e);</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">catch</span> (IllegalAccessException e) {</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">throw</span> <span class="keyword">new</span> IllegalStateException(e);</span></pre></td></tr>
+<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
+ <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"> </pre></td></tr>
+<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Construct an XmlUtil with a given DOM implementation.</span></pre></td></tr>
+<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param domImpl The XML DOM implementation.</span></pre></td></tr>
+<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param domImplLs The Load and Save DOM implementation.</span></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="numLineCover"> 87</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">public</span> XmlUtil(DOMImplementation domImpl, DOMImplementationLS domImplLs) {</pre></td></tr>
+<tr> <td class="numLineCover"> 88</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.domImpl = domImpl;</pre></td></tr>
+<tr> <td class="numLineCover"> 89</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.domImplLs = domImplLs;</pre></td></tr>
+<tr> <td class="numLineCover"> 90</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Make a new XML document.</span></pre></td></tr>
+<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param nsUri The namespace URI of the document element to create or null.</span></pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param localPart The qualified name of the document element to be created or null.</span></pre></td></tr>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param docType The type of document to be created or null. When doctype is</span></pre></td></tr>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * not null, its Node.ownerDocument attribute is set to the document being</span></pre></td></tr>
+<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * created.</span></pre></td></tr>
+<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The new document.</span></pre></td></tr>
+<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Document makeDocument(String nsUri, String localPart, DocumentType docType) {</pre></td></tr>
+<tr> <td class="numLineCover"> 103</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Document document = domImpl.createDocument(nsUri, localPart, docType);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 104</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> document.setXmlVersion(XML_VERSION);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 105</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> document;</span></pre></td></tr>
+<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Make a new XML document.</span></pre></td></tr>
+<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"> 111</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param qname The qualified name of the document element to be created.</span></pre></td></tr>
+<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param docType The type of document to be created or null. When doctype is</span></pre></td></tr>
+<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * not null, its Node.ownerDocument attribute is set to the document being</span></pre></td></tr>
+<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * created.</span></pre></td></tr>
+<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The new document.</span></pre></td></tr>
+<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Document makeDocument(QName qname, DocumentType docType) {</pre></td></tr>
+<tr> <td class="numLineCover"> 118</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> makeDocument(qname.getNamespaceURI(), qname.getLocalPart(), docType);</span></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="numLine"> 120</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Make a new XML document.</span></pre></td></tr>
+<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param qname The qualified name of the document element to be created.</span></pre></td></tr>
+<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The new document.</span></pre></td></tr>
+<tr> <td class="numLine"> 126</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 127</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Document makeDocument(QName qname) {</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">return</span> makeDocument(qname, <span class="keyword">null</span>);</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>
+<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 132</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Set standard DOM configuration.</span></pre></td></tr>
+<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param document The document to set the configuration for.</span></pre></td></tr>
+<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> setConfigParams(Document document) {</pre></td></tr>
+<tr> <td class="numLineCover"> 137</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> DOMConfiguration config = document.getDomConfig();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 138</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.setParameter(DOM_CONFIG_COMMENTS, <span class="keyword">true</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 139</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.setParameter(DOM_CONFIG_ELEMENT_CONTENT_WHITESPACE, <span class="keyword">true</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 140</td> <td class="nbHitsUncovered"><a title="Line 140: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 140: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (config.canSetParameter(DOM_CONFIG_CANONICAL_FORM, <span class="keyword">true</span>)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 141</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> config.setParameter(DOM_CONFIG_CANONICAL_FORM, <span class="keyword">true</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 142</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 143</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 144</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Write an XML document to a writer.</span></pre></td></tr>
+<tr> <td class="numLine"> 147</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 148</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param document The XML document to write.</span></pre></td></tr>
+<tr> <td class="numLine"> 149</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param output A writer to which the document will be written.</span></pre></td></tr>
+<tr> <td class="numLine"> 150</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException if the document can't be serialized.</span></pre></td></tr>
+<tr> <td class="numLine"> 151</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 152</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> writeXmlDocument(Document document, Writer output)</pre></td></tr>
+<tr> <td class="numLine"> 153</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 154</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> writeXmlDocument(document, getLsOutput(output));</pre></td></tr>
+<tr> <td class="numLineCover"> 155</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 156</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 158</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Write an XML document to an {@link LSOutput} object.</span></pre></td></tr>
+<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param document The XML document to write.</span></pre></td></tr>
+<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param output The output object to write the document to.</span></pre></td></tr>
+<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException if the document can't be serialized.</span></pre></td></tr>
+<tr> <td class="numLine"> 163</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 164</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> writeXmlDocument(Document document, LSOutput output)</pre></td></tr>
+<tr> <td class="numLine"> 165</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 166</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> writeXmlDocument(document, makeSerializer(), output);</pre></td></tr>
+<tr> <td class="numLineCover"> 167</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 168</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 169</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Write an XML document to an {@link LSOutput} object.</span></pre></td></tr>
+<tr> <td class="numLine"> 171</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 172</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param document The XML document to write.</span></pre></td></tr>
+<tr> <td class="numLine"> 173</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param serializer The serializer to use.</span></pre></td></tr>
+<tr> <td class="numLine"> 174</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param output The output object to write the document to.</span></pre></td></tr>
+<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException if the document can't be serialized.</span></pre></td></tr>
+<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"> 177</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> writeXmlDocument(Document document, LSSerializer serializer, LSOutput output)</pre></td></tr>
+<tr> <td class="numLine"> 178</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLine"> 179</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 180</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> serializer.write(document, output);</pre></td></tr>
+<tr> <td class="numLineCover"> 181</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (LSException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 182</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(e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 183</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 184</td> <td class="nbHitsCovered"> 4</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>
+<tr> <td class="numLine"> 186</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> LSSerializer makeSerializer() {</pre></td></tr>
+<tr> <td class="numLineCover"> 187</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> domImplLs.createLSSerializer();</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="numLine"> 189</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 190</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 191</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get an {@link LSOutput} object suitable for writing a document.</span></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"> <span class="comment"> * @param output A Writer to which the output will be written.</span></pre></td></tr>
+<tr> <td class="numLine"> 194</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return An LSOutput object correspoding to the given writer.</span></pre></td></tr>
+<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"> 196</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> LSOutput getLsOutput(Writer output) {</pre></td></tr>
+<tr> <td class="numLineCover"> 197</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> LSOutput lsOutput = domImplLs.createLSOutput();</pre></td></tr>
+<tr> <td class="numLineCover"> 198</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> lsOutput.setCharacterStream(output);</pre></td></tr>
+<tr> <td class="numLineCover"> 199</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> lsOutput.setEncoding(<span class="string">"UTF-8"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 200</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> lsOutput;</pre></td></tr>
+<tr> <td class="numLine"> 201</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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="numLine"> 203</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 204</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Convert an XML document to a string.</span></pre></td></tr>
+<tr> <td class="numLine"> 205</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 206</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param document The XML document to write.</span></pre></td></tr>
+<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The XML serialization as a string.</span></pre></td></tr>
+<tr> <td class="numLine"> 208</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException if the document can't be serialized.</span></pre></td></tr>
+<tr> <td class="numLine"> 209</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 210</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String buildXmlString(Document document)</pre></td></tr>
+<tr> <td class="numLine"> 211</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 212</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> StringWriter output = <span class="keyword">new</span> StringWriter();</pre></td></tr>
+<tr> <td class="numLineCover"> 213</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> writeXmlDocument(document, output);</pre></td></tr>
+<tr> <td class="numLineCover"> 214</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> output.toString();</pre></td></tr>
+<tr> <td class="numLine"> 215</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 216</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.config.ConfigSingleton.html b/coverage/com.google.enterprise.adaptor.secmgr.config.ConfigSingleton.html
new file mode 100644
index 0000000..570aab4
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.config.ConfigSingleton.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.config.ConfigSingleton</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.config.ConfigSingleton.html">ConfigSingleton</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">12</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:42px"><span class="text">9/21</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.config.ConfigSingleton.html">ConfigSingleton$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.config.ConfigSingleton.html">ConfigSingleton$GsonRegistrations</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.config.ConfigSingleton.html">ConfigSingleton$LocalObservable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2008 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.config;</pre></td></tr>
+<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"> <span class="keyword">import</span> com.google.common.base.Preconditions;</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.google.gson.Gson;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.GsonBuilder;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </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.util.Observable;</pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Observer;</pre></td></tr>
+<tr> <td class="numLine"> 24</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"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.concurrent.GuardedBy;</pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.concurrent.ThreadSafe;</pre></td></tr>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * A singleton class to access configured parameters.</span></pre></td></tr>
+<tr> <td class="numLine"> 31</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>
+ <td class="src"><pre class="src"> @ThreadSafe</pre></td></tr>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> ConfigSingleton {</pre></td></tr>
+<tr> <td class="numLineCover"> 34</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 LOGGER = Logger.getLogger(ConfigSingleton.<span class="keyword">class</span>.getName());</pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <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"> <span class="keyword">private</span> <span class="keyword">static</span> ConfigSingleton instance;</pre></td></tr>
+<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @GuardedBy(<span class="string">"class"</span>) <span class="keyword">private</span> <span class="keyword">static</span> Gson gson;</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> LocalObservable observable = <span class="keyword">new</span> LocalObservable();</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="numLineCover"> 40</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">class</span> LocalObservable <span class="keyword">extends</span> Observable {</pre></td></tr>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">void</span> setChanged() {</pre></td></tr>
+<tr> <td class="numLineCover"> 43</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">super</span>.setChanged();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 44</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 47</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> ConfigSingleton() {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 48</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> resetInternal();</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></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"> @VisibleForTesting</pre></td></tr>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">synchronized</span> <span class="keyword">void</span> reset() {</pre></td></tr>
+<tr> <td class="numLineCover"> 53</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> instance.resetInternal();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 54</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">synchronized</span> <span class="keyword">void</span> resetInternal() {</pre></td></tr>
+<tr> <td class="numLineCover"> 57</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Adds an observer that's notified of config changes.</span></pre></td></tr>
+<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 62</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> addObserver(Observer observer) {</pre></td></tr>
+<tr> <td class="numLineCover"> 63</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> observable.addObserver(observer);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 64</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets an observable that's notified of config changes.</span></pre></td></tr>
+<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Observable getObservable() {</pre></td></tr>
+<tr> <td class="numLineCover"> 70</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> observable;</span></pre></td></tr>
+<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="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"> <span class="keyword">static</span> <span class="keyword">void</span> setChanged() {</pre></td></tr>
+<tr> <td class="numLineCover"> 74</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> observable.setChanged();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 75</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> observable.notifyObservers();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 76</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">synchronized</span> <span class="keyword">void</span> setGsonRegistrations(GsonRegistrations registrations) {</pre></td></tr>
+<tr> <td class="numLineCover"> 79</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> GsonBuilder builder = <span class="keyword">new</span> GsonBuilder();</pre></td></tr>
+<tr> <td class="numLineCover"> 80</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> builder.setPrettyPrinting();</pre></td></tr>
+<tr> <td class="numLineCover"> 81</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> registrations.register(builder);</pre></td></tr>
+<tr> <td class="numLineCover"> 82</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> gson = builder.create();</pre></td></tr>
+<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"> 1</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"> </pre></td></tr>
+<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/** A type to use for passing in Gson registrations. */</span></pre></td></tr>
+<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">interface</span> GsonRegistrations {</pre></td></tr>
+<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> register(GsonBuilder builder);</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">static</span> <span class="keyword">synchronized</span> Gson getGson() {</pre></td></tr>
+<tr> <td class="numLineCover"> 91</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Preconditions.checkNotNull(gson);</pre></td></tr>
+<tr> <td class="numLineCover"> 92</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> gson;</pre></td></tr>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.http.HttpClientInterface.html b/coverage/com.google.enterprise.adaptor.secmgr.http.HttpClientInterface.html
new file mode 100644
index 0000000..c249238
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.http.HttpClientInterface.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.http.HttpClientInterface</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.http.HttpClientInterface.html">HttpClientInterface</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2008 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.http;</pre></td></tr>
+<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.collect.ListMultimap;</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> java.net.URL;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.Nonnull;</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.Nullable;</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>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * An abstraction to hide HttpClient behind.</span></pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * This allows HTTP transport to be mocked for testing.</span></pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">interface</span> HttpClientInterface {</pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Create a new HTTP POST exchange object.</span></pre></td></tr>
+<tr> <td class="numLine"> 31</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>
+ <td class="src"><pre class="src"> <span class="comment"> * @param url The URL to send the request to.</span></pre></td></tr>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param parameters The POST parameters.</span></pre></td></tr>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new HTTP exchange object.</span></pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> HttpExchange postExchange(@Nonnull URL url,</pre></td></tr>
+<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nullable ListMultimap<String, String> parameters);</pre></td></tr>
+<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.http.HttpExchange.html b/coverage/com.google.enterprise.adaptor.secmgr.http.HttpExchange.html
new file mode 100644
index 0000000..216dd7f
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.http.HttpExchange.html
@@ -0,0 +1,418 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.http.HttpExchange</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.http.HttpExchange.html">HttpExchange</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2008 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.http;</pre></td></tr>
+<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.collect.ListMultimap;</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> java.io.IOException;</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.InputStream;</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.net.URL;</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.util.List;</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>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.Nonnull;</pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.Nullable;</pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.ParametersAreNonnullByDefault;</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>
+ <td class="src"><pre class="src"> <span class="comment"> * An abstraction for an HTTP exchange. @see HttpClientInterface</span></pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @ParametersAreNonnullByDefault</pre></td></tr>
+<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">interface</span> HttpExchange {</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>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Sets the proxy to use for the exchange.</span></pre></td></tr>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param proxy The proxy host and port.</span></pre></td></tr>
+<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setProxy(String proxy);</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="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Set credentials to use for HTTP Basic authentication.</span></pre></td></tr>
+<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param username The username to use, never null or empty.</span></pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param password The password to use, never null or empty.</span></pre></td></tr>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setBasicAuthCredentials(String username, String password);</pre></td></tr>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Tells this exchange whether to follow redirects. Default is to not follow</span></pre></td></tr>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * them.</span></pre></td></tr>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param followRedirects {@code true} means follow them.</span></pre></td></tr>
+<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setFollowRedirects(<span class="keyword">boolean</span> followRedirects);</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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Sets the timeout.</span></pre></td></tr>
+<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setTimeout(<span class="keyword">int</span> timeout);</pre></td></tr>
+<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets the HTTP method name.</span></pre></td></tr>
+<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The HTTP method string: e.g. {@code "GET"} or {@code "POST"}.</span></pre></td></tr>
+<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getHttpMethod();</pre></td></tr>
+<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<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"> 71</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets the request URL for this exchange.</span></pre></td></tr>
+<tr> <td class="numLine"> 72</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>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The URL for this exchange.</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="numLine"> 75</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> URL getUrl();</pre></td></tr>
+<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Adds a parameter to the exchange. Works only for POST methods.</span></pre></td></tr>
+<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param name The parameter's name.</span></pre></td></tr>
+<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param value The parameter's value.</span></pre></td></tr>
+<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> addParameter(String name, String value);</pre></td></tr>
+<tr> <td class="numLine"> 84</td> <td class="nbHits"> </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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Adds an HTTP request header field. Must not be used to set cookies (use</span></pre></td></tr>
+<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * {@link #addCookies}).</span></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"> * @param name The header's name (case insensitive).</span></pre></td></tr>
+<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param value The header's value.</span></pre></td></tr>
+<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"> 92</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> addRequestHeader(String name, String value);</pre></td></tr>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Sets an HTTP request header field. Overrides any previous header of that</span></pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * name. Must not be used to set cookies (use {@link #addCookies}).</span></pre></td></tr>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param name The header's name (case insensitive).</span></pre></td></tr>
+<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param value The header's value.</span></pre></td></tr>
+<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setRequestHeader(String name, String value);</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="numLine"> 103</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets the request header values for a specified header name.</span></pre></td></tr>
+<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param headerName The header name (case insensitive).</span></pre></td></tr>
+<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The header values for that name.</span></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"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> List<String> getRequestHeaderValues(String headerName);</pre></td></tr>
+<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 112</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>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets the request header value for a specified header name. If there are</span></pre></td></tr>
+<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * one or more headers with that name, returns the first one; otherwise</span></pre></td></tr>
+<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * returns {@code null}.</span></pre></td></tr>
+<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param headerName The header's name (case insensitive).</span></pre></td></tr>
+<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The specified request header value.</span></pre></td></tr>
+<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nullable</pre></td></tr>
+<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getRequestHeaderValue(String headerName);</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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Sets the entity of the request.</span></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"> <span class="comment"> * @param byteArrayRequestEntity The bytes to use as an entity.</span></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="keyword">public</span> <span class="keyword">void</span> setRequestBody(<span class="keyword">byte</span>[] byteArrayRequestEntity);</pre></td></tr>
+<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Performs the HTTP exchange.</span></pre></td></tr>
+<tr> <td class="numLine"> 132</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The status code from the exchange.</span></pre></td></tr>
+<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException if there's a transport error.</span></pre></td></tr>
+<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> exchange() <span class="keyword">throws</span> IOException;</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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets the response entity (body) as a string.</span></pre></td></tr>
+<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The entity.</span></pre></td></tr>
+<tr> <td class="numLine"> 142</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException if there's a transport error.</span></pre></td></tr>
+<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 144</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getResponseEntityAsString() <span class="keyword">throws</span> IOException;</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="numLine"> 147</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 148</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets the response entity (body) as an input stream.</span></pre></td></tr>
+<tr> <td class="numLine"> 149</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 150</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The entity input stream.</span></pre></td></tr>
+<tr> <td class="numLine"> 151</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException if there's a transport error.</span></pre></td></tr>
+<tr> <td class="numLine"> 152</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 153</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 154</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> InputStream getResponseEntityAsStream() <span class="keyword">throws</span> IOException;</pre></td></tr>
+<tr> <td class="numLine"> 155</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 156</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets the response header values for a given header name.</span></pre></td></tr>
+<tr> <td class="numLine"> 158</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param headerName The header name to use.</span></pre></td></tr>
+<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The values of all the response headers with that name.</span></pre></td></tr>
+<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 163</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> List<String> getResponseHeaderValues(String headerName);</pre></td></tr>
+<tr> <td class="numLine"> 164</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 165</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets the response header value for a given header name. If there are one</span></pre></td></tr>
+<tr> <td class="numLine"> 167</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * or more such headers, returns the first one; otherwise returns</span></pre></td></tr>
+<tr> <td class="numLine"> 168</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * {@code null}.</span></pre></td></tr>
+<tr> <td class="numLine"> 169</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param headerName The header name to use.</span></pre></td></tr>
+<tr> <td class="numLine"> 171</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The value of the specified response header.</span></pre></td></tr>
+<tr> <td class="numLine"> 172</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 173</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nullable</pre></td></tr>
+<tr> <td class="numLine"> 174</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getResponseHeaderValue(String headerName);</pre></td></tr>
+<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<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"> 177</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets all of the headers in the response as a multimap. The map keys will</span></pre></td></tr>
+<tr> <td class="numLine"> 178</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * always be lower case; convert a key argument to lower case before doing</span></pre></td></tr>
+<tr> <td class="numLine"> 179</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * lookup.</span></pre></td></tr>
+<tr> <td class="numLine"> 180</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 181</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return An immutable multimap of all the received headers.</span></pre></td></tr>
+<tr> <td class="numLine"> 182</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 183</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Nonnull</pre></td></tr>
+<tr> <td class="numLine"> 184</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> ListMultimap<String, String> getResponseHeaders();</pre></td></tr>
+<tr> <td class="numLine"> 185</td> <td class="nbHits"> </td>
+ <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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 187</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets the status code from the exchange.</span></pre></td></tr>
+<tr> <td class="numLine"> 188</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 189</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The status code.</span></pre></td></tr>
+<tr> <td class="numLine"> 190</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 191</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> getStatusCode();</pre></td></tr>
+<tr> <td class="numLine"> 192</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 193</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 194</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Closes the exchange and reclaim its resources.</span></pre></td></tr>
+<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"> 196</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> close();</pre></td></tr>
+<tr> <td class="numLine"> 197</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.json.GsonTypes.html b/coverage/com.google.enterprise.adaptor.secmgr.json.GsonTypes.html
new file mode 100644
index 0000000..21c252c
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.json.GsonTypes.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.json.GsonTypes</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.GsonTypes.html">GsonTypes</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">19</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:26px"><span class="text">7/26</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">17</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:5px"><span class="text">1/18</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.0;</span>4</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/*</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Copyright 2011 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 16</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.json;</pre></td></tr>
+<tr> <td class="numLine"> 17</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.base.Preconditions;</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.google.gson.internal.$Gson$Types;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.lang.reflect.ParameterizedType;</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.lang.reflect.Type;</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>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * An extension of $Gson$Types to get generalized parameter types. This has</span></pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * been submitted to the Gson project; if accepted this file can be removed.</span></pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">class</span> GsonTypes {</pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Don't instantiate.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 31</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> GsonTypes() {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 32</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> UnsupportedOperationException();</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>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">static</span> Type[] getParameterTypes(Type context, Class<?> parameterizedRawType) {</pre></td></tr>
+<tr> <td class="numLineCover"> 36</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> getParameterTypes(context, $Gson$Types.getRawType(context), parameterizedRawType);</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>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">static</span> Type[] getParameterTypes(Type context, Class<?> contextRawType,</pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Class<?> parameterizedRawType) {</pre></td></tr>
+<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> Type resolvedType = getSupertype(context, contextRawType, parameterizedRawType);</pre></td></tr>
+<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> ((ParameterizedType) resolvedType).getActualTypeArguments();</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="numLine"> 44</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copied from $Gson$Types since it's not exposed there.</span></pre></td></tr>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> Type getSupertype(Type context, Class<?> contextRawType, Class<?> supertype) {</pre></td></tr>
+<tr> <td class="numLineCover"> 47</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> Preconditions.checkArgument(supertype.isAssignableFrom(contextRawType));</pre></td></tr>
+<tr> <td class="numLineCover"> 48</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> $Gson$Types.resolve(context, contextRawType,</pre></td></tr>
+<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> getGenericSupertype(context, contextRawType, supertype));</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>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copied from $Gson$Types since it's not exposed there.</span></pre></td></tr>
+<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> Type getGenericSupertype(Type context, Class<?> rawType, Class<?> toResolve) {</pre></td></tr>
+<tr> <td class="numLineCover"> 54</td> <td class="nbHitsUncovered"><a title="Line 54: Conditional coverage 50% (1/2)."> 3</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 54: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (toResolve == rawType) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 55</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> context;</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">// we skip searching through interfaces if unknown is an interface</span></pre></td></tr>
+<tr> <td class="numLineCover"> 59</td> <td class="nbHitsUncovered"><a title="Line 59: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 59: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (toResolve.isInterface()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 60</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Class<?>[] interfaces = rawType.getInterfaces();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 61</td> <td class="nbHitsUncovered"><a title="Line 61: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 61: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0, length = interfaces.length; i < length; i++) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 62</td> <td class="nbHitsUncovered"><a title="Line 62: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 62: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (interfaces[i] == toResolve) {</a></span></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> rawType.getGenericInterfaces()[i];</span></pre></td></tr>
+<tr> <td class="numLineCover"> 64</td> <td class="nbHitsUncovered"><a title="Line 64: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 64: Conditional coverage 0% (0/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (toResolve.isAssignableFrom(interfaces[i])) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 65</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> getGenericSupertype(rawType.getGenericInterfaces()[i], interfaces[i], toResolve);</span></pre></td></tr>
+<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// check our supertypes</span></pre></td></tr>
+<tr> <td class="numLineCover"> 71</td> <td class="nbHitsUncovered"><a title="Line 71: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 71: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!rawType.isInterface()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 72</td> <td class="nbHitsUncovered"><a title="Line 72: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 72: Conditional coverage 0% (0/2)."> <span class="keyword">while</span> (rawType != Object.<span class="keyword">class</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 73</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Class<?> rawSupertype = rawType.getSuperclass();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 74</td> <td class="nbHitsUncovered"><a title="Line 74: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 74: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (rawSupertype == toResolve) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 75</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> rawType.getGenericSuperclass();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 76</td> <td class="nbHitsUncovered"><a title="Line 76: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 76: Conditional coverage 0% (0/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (toResolve.isAssignableFrom(rawSupertype)) {</a></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">return</span> getGenericSupertype(rawType.getGenericSuperclass(), rawSupertype, toResolve);</span></pre></td></tr>
+<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 79</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> rawType = rawSupertype;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 80</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</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"> <span class="comment">// we can't resolve this further</span></pre></td></tr>
+<tr> <td class="numLineCover"> 84</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> toResolve;</span></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"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.json.ProxyTypeAdapter.html b/coverage/com.google.enterprise.adaptor.secmgr.json.ProxyTypeAdapter.html
new file mode 100644
index 0000000..b475605
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.json.ProxyTypeAdapter.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.json.ProxyTypeAdapter</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.ProxyTypeAdapter.html">ProxyTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">13</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:43px"><span class="text">10/23</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.5714285714285716;</span>2.571</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/*</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Copyright 2011 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 16</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.json;</pre></td></tr>
+<tr> <td class="numLine"> 17</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.JsonDeserializationContext;</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.google.gson.JsonDeserializer;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.JsonElement;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.JsonSerializationContext;</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.JsonSerializer;</pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.internal.$Gson$Types;</pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.lang.reflect.Constructor;</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.lang.reflect.InvocationTargetException;</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.lang.reflect.Type;</pre></td></tr>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * A type adapter for a given type that uses a proxy class for serialization.</span></pre></td></tr>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * The proxy is a class that will be serialized in place of the type. An</span></pre></td></tr>
+<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * instance of the type is serialized by converting it to an instance of the</span></pre></td></tr>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * proxy class by means of the proxy's one-argument constructor and then</span></pre></td></tr>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * serializing the proxy. An instance of the type is deserialized by first</span></pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * deserializing a proxy instance, then using the proxy's</span></pre></td></tr>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * {@link TypeProxy#build} to convert it to an instance of the type.</span></pre></td></tr>
+<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param <T> The type that the proxy will represent.</span></pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param <P> The type of the corresponding proxy class.</span></pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> ProxyTypeAdapter<T, P <span class="keyword">extends</span> TypeProxy<T>></pre></td></tr>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">implements</span> JsonSerializer<T>, JsonDeserializer<T> {</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="numLine"> 44</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Class<P> proxyClass;</pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Constructor<P> constructor;</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="numLineCover"> 47</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">private</span> ProxyTypeAdapter(Class<P> proxyClass, Constructor<P> constructor) {</pre></td></tr>
+<tr> <td class="numLineCover"> 48</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.proxyClass = proxyClass;</pre></td></tr>
+<tr> <td class="numLineCover"> 49</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.constructor = constructor;</pre></td></tr>
+<tr> <td class="numLineCover"> 50</td> <td class="nbHitsCovered"> 2</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>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets a type adapter for a given type that uses a proxy class for</span></pre></td></tr>
+<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * serialization.</span></pre></td></tr>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param <S> A type to get an adapter for.</span></pre></td></tr>
+<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param <O> A proxy type to use.</span></pre></td></tr>
+<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param clazz The class corresponding to {@code <S>}.</span></pre></td></tr>
+<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param proxyClass A proxy class for {@code <S>}, corresponding to {@code <O>}.</span></pre></td></tr>
+<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A proxying type adapter for {@code <S>}.</span></pre></td></tr>
+<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <S, O <span class="keyword">extends</span> TypeProxy<S>> Object make(Class<S> clazz,</pre></td></tr>
+<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Class<O> proxyClass) {</pre></td></tr>
+<tr> <td class="numLineCover"> 64</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> ProxyTypeAdapter<S, O>(proxyClass, getConstructor(proxyClass, clazz));</pre></td></tr>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets a type adapter for a given type that uses a proxy class for</span></pre></td></tr>
+<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * serialization.</span></pre></td></tr>
+<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"> 71</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param <S> A type to get an adapter for.</span></pre></td></tr>
+<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param <O> A proxy type to use.</span></pre></td></tr>
+<tr> <td class="numLine"> 73</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param type The type corresponding to {@code <S>}.</span></pre></td></tr>
+<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param proxyClass A proxy class for {@code <S>}, corresponding to {@code <O>}.</span></pre></td></tr>
+<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A proxying type adapter for {@code <S>}.</span></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="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">static</span> <S, O <span class="keyword">extends</span> TypeProxy<S>> Object make(Type type, Class<O> proxyClass) {</pre></td></tr>
+<tr> <td class="numLineCover"> 78</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> ProxyTypeAdapter<S, O>(proxyClass,</span></pre></td></tr>
+<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> getConstructor(proxyClass, $Gson$Types.getRawType(type)));</pre></td></tr>
+<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> JsonElement serialize(T instance, Type typeOfT, JsonSerializationContext context) {</pre></td></tr>
+<tr> <td class="numLineCover"> 84</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> context.serialize(invokeConstructor(constructor, instance), proxyClass);</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> T deserialize(JsonElement elt, Type typeOfT, JsonDeserializationContext context) {</pre></td></tr>
+<tr> <td class="numLineCover"> 89</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> context.<TypeProxy<T>>deserialize(elt, proxyClass).build();</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="numLine"> 91</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <S> Constructor<S> getConstructor(Class<S> clazz, Class<?>... argClasses) {</pre></td></tr>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Constructor<S> constructor;</pre></td></tr>
+<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 95</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> constructor = clazz.getDeclaredConstructor(argClasses);</pre></td></tr>
+<tr> <td class="numLineCover"> 96</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (SecurityException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 97</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">"Exception while getting constructor: "</span>, e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 98</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (NoSuchMethodException e) {</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 class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"Exception while getting constructor: "</span>, e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 100</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 101</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> constructor.setAccessible(<span class="keyword">true</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 102</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> constructor;</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"> <span class="keyword">private</span> <span class="keyword">static</span> <S> S invokeConstructor(Constructor<S> constructor, Object... args) {</pre></td></tr>
+<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 107</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> constructor.newInstance(args);</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">catch</span> (InstantiationException e) {</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 class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"Exception while instantiating class: "</span>, e);</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 class="keyword">catch</span> (InvocationTargetException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 111</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">"Exception while instantiating class: "</span>, e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 112</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IllegalAccessException e) {</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> IllegalArgumentException(<span class="string">"Exception while instantiating class: "</span>, e);</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="numLine"> 115</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html b/coverage/com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html
new file mode 100644
index 0000000..4ef6dcb
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html
@@ -0,0 +1,598 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.json.TypeAdapters</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:53px"><span class="text">7/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$AbstractCollectionTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:91px"><span class="text">11/12</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:62px"><span class="text">5/8</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$AbstractIterableTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">8</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:38px"><span class="text">5/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">8</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/8</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$DispatchTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">17</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/17</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">10</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/10</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$ImmutableListTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:66px"><span class="text">2/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$ImmutableMapTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">15</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:34px"><span class="text">8/23</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:25px"><span class="text">1/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$ImmutableMultisetTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:66px"><span class="text">2/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$ImmutableSetTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">3/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$IterableTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:25px"><span class="text">2/8</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$IterableTypeAdapter$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$IterableTypeAdapter$1$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">5</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/5</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/*</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Copyright 2011 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 16</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.json;</pre></td></tr>
+<tr> <td class="numLine"> 17</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.base.Preconditions;</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.google.common.collect.ImmutableCollection;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.collect.ImmutableList;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.collect.ImmutableMap;</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.collect.ImmutableMultiset;</pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.collect.ImmutableSet;</pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.JsonArray;</pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.JsonDeserializationContext;</pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.JsonDeserializer;</pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.JsonElement;</pre></td></tr>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.JsonNull;</pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.JsonObject;</pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.JsonParseException;</pre></td></tr>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.JsonSerializationContext;</pre></td></tr>
+<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.gson.JsonSerializer;</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>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.lang.reflect.Type;</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.Collection;</pre></td></tr>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Iterator;</pre></td></tr>
+<tr> <td class="numLine"> 37</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"> 38</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static methods for some useful type adapters.</span></pre></td></tr>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> TypeAdapters {</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="numLine"> 44</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 JSON_KEY_CLASS = <span class="string">"typeName"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Don't instantiate.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 47</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> TypeAdapters() {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 48</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> UnsupportedOperationException();</span></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="numLine"> 50</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets a type adapter for an iterable type. The returned adapter does lazy</span></pre></td></tr>
+<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * deserialization.</span></pre></td></tr>
+<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A type adapter for {@code Iterable<T>}.</span></pre></td></tr>
+<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Object iterable() {</pre></td></tr>
+<tr> <td class="numLineCover"> 58</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> ITERABLE;</span></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="numLine"> 60</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"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Object ITERABLE = <span class="keyword">new</span> IterableTypeAdapter<Object>();</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="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> <span class="keyword">class</span> IterableTypeAdapter<T></span></pre></td></tr>
+<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">extends</span> AbstractIterableTypeAdapter<T, Iterable<T>> {</pre></td></tr>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> IterableTypeAdapter() {</pre></td></tr>
+<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">super</span>(Iterable.<span class="keyword">class</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 68</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Iterable<T> deserialize(JsonElement element, Type type,</pre></td></tr>
+<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> JsonDeserializationContext context) {</pre></td></tr>
+<tr> <td class="numLineCover"> 73</td> <td class="nbHitsUncovered"><a title="Line 73: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 73: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (element.isJsonNull()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 74</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></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="numLineCover"> 76</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">final</span> JsonArray ja = element.getAsJsonArray();</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">final</span> Type elementType = GsonTypes.getParameterTypes(type, rawType)[0];</span></pre></td></tr>
+<tr> <td class="numLineCover"> 78</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> Iterable<T>() {</span></pre></td></tr>
+<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Iterator<T> iterator() {</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">final</span> Iterator<JsonElement> jsonIterator = ja.iterator();</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 class="keyword">return</span> <span class="keyword">new</span> Iterator<T>() {</span></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"> @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">boolean</span> hasNext() {</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">return</span> jsonIterator.hasNext();</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"> </pre></td></tr>
+<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> T next() {</pre></td></tr>
+<tr> <td class="numLineCover"> 91</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> JsonElement je = jsonIterator.next();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 92</td> <td class="nbHitsUncovered"><a title="Line 92: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 92: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">return</span> (je == <span class="keyword">null</span> || je.isJsonNull())</a></span></pre></td></tr>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ? <span class="keyword">null</span></pre></td></tr>
+<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> : context.<T>deserialize(je, elementType);</pre></td></tr>
+<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> remove() {</pre></td></tr>
+<tr> <td class="numLineCover"> 99</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> UnsupportedOperationException();</span></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="numLine"> 102</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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="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">abstract</span> <span class="keyword">static</span> <span class="keyword">class</span> AbstractIterableTypeAdapter<T, I <span class="keyword">extends</span> Iterable<T>></span></pre></td></tr>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">implements</span> JsonSerializer<I>, JsonDeserializer<I> {</pre></td></tr>
+<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 110</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">static</span> <span class="keyword">final</span> JsonNull JSON_NULL = <span class="keyword">new</span> JsonNull();</pre></td></tr>
+<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">final</span> Class<?> rawType;</pre></td></tr>
+<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 114</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">protected</span> AbstractIterableTypeAdapter(Class<?> rawType) {</pre></td></tr>
+<tr> <td class="numLineCover"> 115</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> Preconditions.checkNotNull(rawType);</pre></td></tr>
+<tr> <td class="numLineCover"> 116</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.rawType = rawType;</pre></td></tr>
+<tr> <td class="numLineCover"> 117</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> JsonElement serialize(I iterable, Type typeOfI, JsonSerializationContext context) {</pre></td></tr>
+<tr> <td class="numLineCover"> 121</td> <td class="nbHitsUncovered"><a title="Line 121: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 121: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (iterable == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 122</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> JSON_NULL;</span></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="numLineCover"> 124</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> JsonArray ja = <span class="keyword">new</span> JsonArray();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 125</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Type typeOfElement = GsonTypes.getParameterTypes(typeOfI, rawType)[0];</span></pre></td></tr>
+<tr> <td class="numLineCover"> 126</td> <td class="nbHitsUncovered"><a title="Line 126: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 126: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (T element : iterable) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 127</td> <td class="nbHitsUncovered"><a title="Line 127: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 127: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> ja.add((element == <span class="keyword">null</span>)</a></span></pre></td></tr>
+<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ? JSON_NULL</pre></td></tr>
+<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> : context.serialize(element,</pre></td></tr>
+<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> (typeOfElement == Object.<span class="keyword">class</span>)</pre></td></tr>
+<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ? element.getClass()</pre></td></tr>
+<tr> <td class="numLine"> 132</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> : typeOfElement));</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="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> ja;</span></pre></td></tr>
+<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets a type adapter for an immutable list.</span></pre></td></tr>
+<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A type adapter for {@code ImmutableList<Object>}.</span></pre></td></tr>
+<tr> <td class="numLine"> 142</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Object immutableList() {</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">return</span> IMMUTABLE_LIST;</span></pre></td></tr>
+<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 147</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 148</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets a type adapter for an immutable set.</span></pre></td></tr>
+<tr> <td class="numLine"> 149</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 150</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A type adapter for {@code ImmutableSet<Object>}.</span></pre></td></tr>
+<tr> <td class="numLine"> 151</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 152</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Object immutableSet() {</pre></td></tr>
+<tr> <td class="numLineCover"> 153</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> IMMUTABLE_SET;</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"> </pre></td></tr>
+<tr> <td class="numLine"> 156</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets a type adapter for an immutable multiset.</span></pre></td></tr>
+<tr> <td class="numLine"> 158</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A type adapter for {@code ImmutableMultiset<Object>}.</span></pre></td></tr>
+<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Object immutableMultiset() {</pre></td></tr>
+<tr> <td class="numLineCover"> 162</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> IMMUTABLE_MULTISET;</span></pre></td></tr>
+<tr> <td class="numLine"> 163</td> <td class="nbHits"> </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"> 165</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> Object IMMUTABLE_LIST = <span class="keyword">new</span> ImmutableListTypeAdapter<Object>();</pre></td></tr>
+<tr> <td class="numLineCover"> 166</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> Object IMMUTABLE_SET = <span class="keyword">new</span> ImmutableSetTypeAdapter<Object>();</pre></td></tr>
+<tr> <td class="numLineCover"> 167</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> Object IMMUTABLE_MULTISET = <span class="keyword">new</span> ImmutableMultisetTypeAdapter<Object>();</pre></td></tr>
+<tr> <td class="numLine"> 168</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 169</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> <span class="keyword">class</span> ImmutableListTypeAdapter<T></pre></td></tr>
+<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">extends</span> AbstractCollectionTypeAdapter<T, ImmutableList<T>> {</pre></td></tr>
+<tr> <td class="numLine"> 171</td> <td class="nbHits"> </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"> ImmutableListTypeAdapter() {</pre></td></tr>
+<tr> <td class="numLineCover"> 173</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">super</span>(ImmutableList.<span class="keyword">class</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 174</td> <td class="nbHitsCovered"> 1</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"> </pre></td></tr>
+<tr> <td class="numLine"> 176</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 177</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> ImmutableCollection.Builder<T> getBuilder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 178</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> ImmutableList.builder();</span></pre></td></tr>
+<tr> <td class="numLine"> 179</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">class</span> ImmutableSetTypeAdapter<T></pre></td></tr>
+<tr> <td class="numLine"> 183</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">extends</span> AbstractCollectionTypeAdapter<T, ImmutableSet<T>> {</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"> ImmutableSetTypeAdapter() {</pre></td></tr>
+<tr> <td class="numLineCover"> 186</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">super</span>(ImmutableSet.<span class="keyword">class</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 187</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</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="numLine"> 189</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 190</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> ImmutableCollection.Builder<T> getBuilder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 191</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> ImmutableSet.builder();</pre></td></tr>
+<tr> <td class="numLine"> 192</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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"> </pre></td></tr>
+<tr> <td class="numLine"> 195</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> <span class="keyword">class</span> ImmutableMultisetTypeAdapter<T></pre></td></tr>
+<tr> <td class="numLine"> 196</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">extends</span> AbstractCollectionTypeAdapter<T, ImmutableMultiset<T>> {</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="numLine"> 198</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ImmutableMultisetTypeAdapter() {</pre></td></tr>
+<tr> <td class="numLineCover"> 199</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">super</span>(ImmutableMultiset.<span class="keyword">class</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 200</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 201</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 202</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 203</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> ImmutableCollection.Builder<T> getBuilder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 204</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> ImmutableMultiset.builder();</span></pre></td></tr>
+<tr> <td class="numLine"> 205</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 206</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 208</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">abstract</span> <span class="keyword">static</span> <span class="keyword">class</span> AbstractCollectionTypeAdapter<E, C <span class="keyword">extends</span> Collection<E>></pre></td></tr>
+<tr> <td class="numLine"> 209</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">extends</span> AbstractIterableTypeAdapter<E, C> {</pre></td></tr>
+<tr> <td class="numLine"> 210</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 211</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> AbstractCollectionTypeAdapter(Class<?> rawType) {</pre></td></tr>
+<tr> <td class="numLineCover"> 212</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">super</span>(rawType);</pre></td></tr>
+<tr> <td class="numLineCover"> 213</td> <td class="nbHitsCovered"> 3</td> <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">protected</span> <span class="keyword">abstract</span> ImmutableCollection.Builder<E> getBuilder();</pre></td></tr>
+<tr> <td class="numLine"> 216</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 217</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> C deserialize(JsonElement src, Type typeOfSrc, JsonDeserializationContext context) {</pre></td></tr>
+<tr> <td class="numLineCover"> 219</td> <td class="nbHitsUncovered"><a title="Line 219: Conditional coverage 50% (1/2)."> 2</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 219: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (src.isJsonNull()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 220</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 221</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 222</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> JsonArray ja = src.getAsJsonArray();</pre></td></tr>
+<tr> <td class="numLineCover"> 223</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> Type typeOfElement = GsonTypes.getParameterTypes(typeOfSrc, rawType)[0];</pre></td></tr>
+<tr> <td class="numLineCover"> 224</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> ImmutableCollection.Builder<E> builder = getBuilder();</pre></td></tr>
+<tr> <td class="numLineCover"> 225</td> <td class="nbHitsCovered"><a title="Line 225: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 225: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (JsonElement je : ja) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 226</td> <td class="nbHitsUncovered"><a title="Line 226: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 4</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 226: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> builder.add((je == <span class="keyword">null</span> || je.isJsonNull())</a></span></pre></td></tr>
+<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ? <span class="keyword">null</span></pre></td></tr>
+<tr> <td class="numLine"> 228</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> : context.<E>deserialize(je, typeOfElement));</pre></td></tr>
+<tr> <td class="numLine"> 229</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 230</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @SuppressWarnings(<span class="string">"unchecked"</span>)</pre></td></tr>
+<tr> <td class="numLineCover"> 231</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> C result = (C) builder.build();</pre></td></tr>
+<tr> <td class="numLineCover"> 232</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> result;</pre></td></tr>
+<tr> <td class="numLine"> 233</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 234</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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="numLine"> 236</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 237</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets a type adapter for an immutable map.</span></pre></td></tr>
+<tr> <td class="numLine"> 238</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 239</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A type adapter for {@code ImmutableMap<?, ?>}.</span></pre></td></tr>
+<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 241</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Object immutableMap() {</pre></td></tr>
+<tr> <td class="numLineCover"> 242</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> IMMUTABLE_MAP;</pre></td></tr>
+<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 244</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 245</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> Object IMMUTABLE_MAP = <span class="keyword">new</span> ImmutableMapTypeAdapter<Object, Object>();</pre></td></tr>
+<tr> <td class="numLine"> 246</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 247</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">class</span> ImmutableMapTypeAdapter<K, V></pre></td></tr>
+<tr> <td class="numLine"> 248</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">implements</span> JsonSerializer<ImmutableMap<K, V>>, JsonDeserializer<ImmutableMap<K, V>> {</pre></td></tr>
+<tr> <td class="numLine"> 249</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 250</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 251</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> JsonElement serialize(ImmutableMap<K, V> map, Type typeOfMap,</pre></td></tr>
+<tr> <td class="numLine"> 252</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> JsonSerializationContext context) {</pre></td></tr>
+<tr> <td class="numLineCover"> 253</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Type[] pts = GsonTypes.getParameterTypes(typeOfMap, ImmutableMap.<span class="keyword">class</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 254</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Type typeOfKey = pts[0];</span></pre></td></tr>
+<tr> <td class="numLineCover"> 255</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Type typeOfValue = pts[1];</span></pre></td></tr>
+<tr> <td class="numLineCover"> 256</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> JsonArray ja = <span class="keyword">new</span> JsonArray();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 257</td> <td class="nbHitsUncovered"><a title="Line 257: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 257: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (Map.Entry<K, V> entry : map.entrySet()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 258</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> JsonArray je = <span class="keyword">new</span> JsonArray();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 259</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> je.add(context.serialize(entry.getKey(), typeOfKey));</span></pre></td></tr>
+<tr> <td class="numLineCover"> 260</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> je.add(context.serialize(entry.getValue(), typeOfValue));</span></pre></td></tr>
+<tr> <td class="numLineCover"> 261</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ja.add(je);</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></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">return</span> ja;</span></pre></td></tr>
+<tr> <td class="numLine"> 264</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 266</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 267</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> ImmutableMap<K, V> deserialize(JsonElement src, Type typeOfSrc,</pre></td></tr>
+<tr> <td class="numLine"> 268</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> JsonDeserializationContext context) {</pre></td></tr>
+<tr> <td class="numLineCover"> 269</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Type[] pts = GsonTypes.getParameterTypes(typeOfSrc, ImmutableMap.<span class="keyword">class</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 270</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Type typeOfKey = pts[0];</pre></td></tr>
+<tr> <td class="numLineCover"> 271</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Type typeOfValue = pts[1];</pre></td></tr>
+<tr> <td class="numLineCover"> 272</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> JsonArray ja = src.getAsJsonArray();</pre></td></tr>
+<tr> <td class="numLineCover"> 273</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ImmutableMap.Builder<K, V> builder = ImmutableMap.builder();</pre></td></tr>
+<tr> <td class="numLineCover"> 274</td> <td class="nbHitsUncovered"><a title="Line 274: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 274: Conditional coverage 50% (1/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < ja.size(); i++) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 275</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> JsonArray je = ja.get(i).getAsJsonArray();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 276</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> K key = context.<K>deserialize(je.get(0), typeOfKey);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 277</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> V value = context.<V>deserialize(je.get(1), typeOfValue);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 278</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.put(key, value);</span></pre></td></tr>
+<tr> <td class="numLine"> 279</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 280</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> builder.build();</pre></td></tr>
+<tr> <td class="numLine"> 281</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 282</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 283</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 284</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 285</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets a type adapter for a given class that dispatches on a given set of</span></pre></td></tr>
+<tr> <td class="numLine"> 286</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * subclasses.</span></pre></td></tr>
+<tr> <td class="numLine"> 287</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 288</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param <T> A given class type.</span></pre></td></tr>
+<tr> <td class="numLine"> 289</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param classes Some subclasses of {@code <T>}.</span></pre></td></tr>
+<tr> <td class="numLine"> 290</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A dispatching type adapter for {@code <T>}.</span></pre></td></tr>
+<tr> <td class="numLine"> 291</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 292</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <T> Object dispatch(Iterable<Class<? <span class="keyword">extends</span> T>> classes) {</pre></td></tr>
+<tr> <td class="numLineCover"> 293</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> DispatchTypeAdapter<T>(classes);</span></pre></td></tr>
+<tr> <td class="numLine"> 294</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 295</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 296</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">class</span> DispatchTypeAdapter<T></pre></td></tr>
+<tr> <td class="numLine"> 297</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">implements</span> JsonSerializer<T>, JsonDeserializer<T> {</pre></td></tr>
+<tr> <td class="numLine"> 298</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 299</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">final</span> ImmutableList<Class<? <span class="keyword">extends</span> T>> classes;</pre></td></tr>
+<tr> <td class="numLine"> 300</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 301</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> DispatchTypeAdapter(Iterable<Class<? <span class="keyword">extends</span> T>> classes) {</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">this</span>.classes = ImmutableList.copyOf(classes);</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></pre></td></tr>
+<tr> <td class="numLine"> 304</td> <td class="nbHits"> </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"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 306</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> JsonElement serialize(T instance, Type typeOfT, JsonSerializationContext context) {</pre></td></tr>
+<tr> <td class="numLineCover"> 307</td> <td class="nbHitsUncovered"><a title="Line 307: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 307: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (Class<? <span class="keyword">extends</span> T> subClass : classes) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 308</td> <td class="nbHitsUncovered"><a title="Line 308: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 308: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (subClass.isInstance(instance)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 309</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> JsonObject jo = context.serialize(instance, subClass).getAsJsonObject();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 310</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> jo.addProperty(JSON_KEY_CLASS, subClass.getSimpleName());</span></pre></td></tr>
+<tr> <td class="numLineCover"> 311</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> jo;</span></pre></td></tr>
+<tr> <td class="numLine"> 312</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 313</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 314</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> JsonParseException(<span class="string">"Unknown subclass: "</span> + instance);</span></pre></td></tr>
+<tr> <td class="numLine"> 315</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 316</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> T deserialize(JsonElement je, Type typeOfT, JsonDeserializationContext context) {</pre></td></tr>
+<tr> <td class="numLineCover"> 319</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> JsonObject jo = je.getAsJsonObject();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 320</td> <td class="nbHitsUncovered"><a title="Line 320: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 320: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!jo.has(JSON_KEY_CLASS)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 321</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> JsonParseException(<span class="string">"Missing "</span> + JSON_KEY_CLASS + <span class="string">" binding: "</span> + jo);</span></pre></td></tr>
+<tr> <td class="numLine"> 322</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 323</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String typeName = jo.getAsJsonPrimitive(JSON_KEY_CLASS).getAsString();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 324</td> <td class="nbHitsUncovered"><a title="Line 324: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 324: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (Class<? <span class="keyword">extends</span> T> subClass : classes) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 325</td> <td class="nbHitsUncovered"><a title="Line 325: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 325: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (subClass.getSimpleName().equals(typeName)) {</a></span></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">return</span> context.<T>deserialize(jo, subClass);</span></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"> 328</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 329</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> JsonParseException(<span class="string">"Unknown subclass: "</span> + typeName);</span></pre></td></tr>
+<tr> <td class="numLine"> 330</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 331</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 332</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.json.TypeProxy.html b/coverage/com.google.enterprise.adaptor.secmgr.json.TypeProxy.html
new file mode 100644
index 0000000..2342be1
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.json.TypeProxy.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.json.TypeProxy</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeProxy.html">TypeProxy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/*</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Copyright 2011 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 16</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.json;</pre></td></tr>
+<tr> <td class="numLine"> 17</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * This interface is used by {@link ProxyTypeAdapter} to handle immutable types.</span></pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * In addition to methods specified by this interface, the proxy must implement</span></pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * a no-argument constructor (for deserialization) and a one-argument</span></pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * constructor where the argument is an instance of {@code <S>} (for</span></pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * serialization).</span></pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param <S> The type that this is a proxy for.</span></pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">interface</span> TypeProxy<S> {</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>
+ <td class="src"><pre class="src"> <span class="comment"> * Creates an instance of {@code <S>} from this proxy. Assumes that the proxy</span></pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * has been appropriately initialized.</span></pre></td></tr>
+<tr> <td class="numLine"> 31</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>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> S build();</pre></td></tr>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.modules.AuthzResult.html b/coverage/com.google.enterprise.adaptor.secmgr.modules.AuthzResult.html
new file mode 100644
index 0000000..c2c8ac3
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.modules.AuthzResult.html
@@ -0,0 +1,678 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.modules.AuthzResult</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.modules.AuthzResult.html">AuthzResult</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">46</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/46</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.2727272727272727;</span>1.273</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.modules.AuthzResult.html">AuthzResult$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.2727272727272727;</span>1.273</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.modules.AuthzResult.html">AuthzResult$Builder</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">28</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/28</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.2727272727272727;</span>1.273</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2010 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.modules;</pre></td></tr>
+<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.base.Preconditions;</pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.collect.ImmutableList;</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.google.common.collect.ImmutableMap;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.collect.ImmutableSet;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.collect.Maps;</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.collect.Ordering;</pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.common.AuthzStatus;</pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Collection;</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.util.Map;</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.util.Set;</pre></td></tr>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.concurrent.Immutable;</pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.concurrent.NotThreadSafe;</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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Instances of this class are the return value from an authorization process.</span></pre></td></tr>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * At the moment this is just some fancy constructors that create a delegated</span></pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * map.</span></pre></td></tr>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 37</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> @Immutable</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">final</span> <span class="keyword">class</span> AuthzResult <span class="keyword">implements</span> Map<String, AuthzStatus> {</span></pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ImmutableMap<String, AuthzStatus> statusMap;</pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ImmutableSet<String> cacheResults;</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> AuthzResult(ImmutableMap<String, AuthzStatus> statusMap,</pre></td></tr>
+<tr> <td class="numLineCover"> 43</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ImmutableSet<String> determinedByCache) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 44</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.statusMap = statusMap;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 45</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.cacheResults = determinedByCache;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 46</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get an {@link AuthzResult} builder that has a minimum set of resources.</span></pre></td></tr>
+<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * This builder generates an AuthzResult instance that's guaranteed to have a</span></pre></td></tr>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * status for every resource in {@code resources}; those that aren't</span></pre></td></tr>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * explicitly set in the builder will map to {@link</span></pre></td></tr>
+<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * AuthzStatus#INDETERMINATE}.</span></pre></td></tr>
+<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param resources The minimum set of resources to use for the returned</span></pre></td></tr>
+<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * builder.</span></pre></td></tr>
+<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return An {@link AuthzResult} builder.</span></pre></td></tr>
+<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Builder builder(Iterable<String> resources) {</pre></td></tr>
+<tr> <td class="numLineCover"> 60</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Preconditions.checkNotNull(resources);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 61</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> Builder(resources);</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="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">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get an {@link AuthzResult} builder that expands on a previous result.</span></pre></td></tr>
+<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param map The previous result.</span></pre></td></tr>
+<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return An {@link AuthzResult} builder.</span></pre></td></tr>
+<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Builder builder(Map<String, AuthzStatus> map) {</pre></td></tr>
+<tr> <td class="numLineCover"> 71</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Preconditions.checkNotNull(map);</span></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">return</span> <span class="keyword">new</span> Builder(map);</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get an {@link AuthzResult} builder that has a no minimum set of resources;</span></pre></td></tr>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * this is equivalent to passing an empty set of resources as an argument.</span></pre></td></tr>
+<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return An {@link AuthzResult} builder.</span></pre></td></tr>
+<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Builder builder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 82</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ImmutableList<String> resources = ImmutableList.of();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 83</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> Builder(resources);</span></pre></td></tr>
+<tr> <td class="numLine"> 84</td> <td class="nbHits"> </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"> <span class="comment"> * Find out if a resource's determination (PERMIT or DENY) came from</span></pre></td></tr>
+<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * UserCacheConnector.</span></pre></td></tr>
+<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return True if resource's determiantion came from UserCacheConnector.</span></pre></td></tr>
+<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"> 92</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> wasDeterminedByCache(String resource) {</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">return</span> cacheResults.contains(resource);</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * A builder class for AuthzResult instances.</span></pre></td></tr>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @NotThreadSafe</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">public</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">class</span> Builder {</span></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="numLine"> 102</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Map<String, AuthzStatus> map;</pre></td></tr>
+<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ImmutableSet.Builder<String> determinedByCache; <span class="comment">// PERMIT or DENY.</span></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="numLineCover"> 105</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> Builder(Iterable<String> resources) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 106</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> map = Maps.newHashMap();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 107</td> <td class="nbHitsUncovered"><a title="Line 107: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 107: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (String resource : resources) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 108</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> map.put(resource, AuthzStatus.INDETERMINATE);</span></pre></td></tr>
+<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 110</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> determinedByCache = ImmutableSet.builder();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 111</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </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">private</span> Builder(Map<String, AuthzStatus> map) {</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 class="keyword">this</span>.map = Maps.newHashMap(map);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 115</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> determinedByCache = ImmutableSet.builder();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 116</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Add an entry to the builder.</span></pre></td></tr>
+<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param resource The resource for the new entry.</span></pre></td></tr>
+<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param status The status for the new entry.</span></pre></td></tr>
+<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The builder, for convenience.</span></pre></td></tr>
+<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Builder put(String resource, AuthzStatus status) {</pre></td></tr>
+<tr> <td class="numLineCover"> 126</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Preconditions.checkNotNull(resource);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 127</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Preconditions.checkNotNull(status);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 128</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> map.put(resource, status);</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 class="keyword">return</span> <span class="keyword">this</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
+ <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">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Add PERMIT or DENY from cache to the builder.</span></pre></td></tr>
+<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param resource The resource for the new entry.</span></pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param status The status for the new entry.</span></pre></td></tr>
+<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The builder, for convenience.</span></pre></td></tr>
+<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Builder putStatusFromCache(String resource, AuthzStatus status) {</pre></td></tr>
+<tr> <td class="numLineCover"> 140</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Preconditions.checkNotNull(resource);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 141</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Preconditions.checkNotNull(status);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 142</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> map.put(resource, status);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 143</td> <td class="nbHitsUncovered"><a title="Line 143: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 143: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (AuthzStatus.INDETERMINATE != status) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 144</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> determinedByCache.add(resource);</span></pre></td></tr>
+<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 146</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 147</td> <td class="nbHits"> </td>
+ <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="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 150</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Add an entry to the builder.</span></pre></td></tr>
+<tr> <td class="numLine"> 151</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 152</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param entry The entry to add.</span></pre></td></tr>
+<tr> <td class="numLine"> 153</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The builder, for convenience.</span></pre></td></tr>
+<tr> <td class="numLine"> 154</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 155</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Builder add(Map.Entry<String, AuthzStatus> entry) {</pre></td></tr>
+<tr> <td class="numLineCover"> 156</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Preconditions.checkNotNull(entry);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 157</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> put(entry.getKey(), entry.getValue());</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="numLine"> 159</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Add a map of entries to the builder.</span></pre></td></tr>
+<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 163</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param map The map to add.</span></pre></td></tr>
+<tr> <td class="numLine"> 164</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The builder, for convenience.</span></pre></td></tr>
+<tr> <td class="numLine"> 165</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Builder addAll(Map<String, AuthzStatus> map) {</pre></td></tr>
+<tr> <td class="numLineCover"> 167</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Preconditions.checkNotNull(map);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 168</td> <td class="nbHitsUncovered"><a title="Line 168: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 168: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (Map.Entry<String, AuthzStatus> entry : map.entrySet()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 169</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> put(entry.getKey(), entry.getValue());</span></pre></td></tr>
+<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 171</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>;</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 174</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The {@link AuthzResult} instance that's been constructed by this</span></pre></td></tr>
+<tr> <td class="numLine"> 176</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * builder. Calling this method more than once on the same builder</span></pre></td></tr>
+<tr> <td class="numLine"> 177</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * instance is not guaranteed to work.</span></pre></td></tr>
+<tr> <td class="numLine"> 178</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>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AuthzResult build() {</pre></td></tr>
+<tr> <td class="numLineCover"> 180</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> AuthzResult(ImmutableMap.copyOf(map), determinedByCache.build());</span></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>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 184</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 185</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Make an {@link AuthzResult} in which all of the resources have</span></pre></td></tr>
+<tr> <td class="numLine"> 186</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * indeterminate status.</span></pre></td></tr>
+<tr> <td class="numLine"> 187</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 188</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param resources The resources in the result.</span></pre></td></tr>
+<tr> <td class="numLine"> 189</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return An AuthzResult instance.</span></pre></td></tr>
+<tr> <td class="numLine"> 190</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 191</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> AuthzResult makeIndeterminate(Iterable<String> resources) {</pre></td></tr>
+<tr> <td class="numLineCover"> 192</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> builder(resources).build();</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"> </pre></td></tr>
+<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"> 196</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return An empty {@link AuthzResult}.</span></pre></td></tr>
+<tr> <td class="numLine"> 197</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>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> AuthzResult of() {</pre></td></tr>
+<tr> <td class="numLineCover"> 199</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> builder().build();</span></pre></td></tr>
+<tr> <td class="numLine"> 200</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 201</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 202</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 203</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get an {@link AuthzResult} with a single entry.</span></pre></td></tr>
+<tr> <td class="numLine"> 204</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 205</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param r1 The single resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 206</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param s1 The status for that resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The result instance.</span></pre></td></tr>
+<tr> <td class="numLine"> 208</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 209</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> AuthzResult of(String r1, AuthzStatus s1) {</pre></td></tr>
+<tr> <td class="numLineCover"> 210</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> AuthzResult.builder()</span></pre></td></tr>
+<tr> <td class="numLine"> 211</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .put(r1, s1)</pre></td></tr>
+<tr> <td class="numLine"> 212</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .build();</pre></td></tr>
+<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="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="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 216</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get an {@link AuthzResult} with two entries.</span></pre></td></tr>
+<tr> <td class="numLine"> 217</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param r1 The first resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 219</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param s1 The status for the first resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 220</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param r2 The second resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 221</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param s2 The status for the second resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 222</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The result instance.</span></pre></td></tr>
+<tr> <td class="numLine"> 223</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 224</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> AuthzResult of(String r1, AuthzStatus s1, String r2, AuthzStatus s2) {</pre></td></tr>
+<tr> <td class="numLineCover"> 225</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> AuthzResult.builder()</span></pre></td></tr>
+<tr> <td class="numLine"> 226</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .put(r1, s1)</pre></td></tr>
+<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .put(r2, s2)</pre></td></tr>
+<tr> <td class="numLine"> 228</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .build();</pre></td></tr>
+<tr> <td class="numLine"> 229</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 230</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 231</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 232</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get an {@link AuthzResult} with three entries.</span></pre></td></tr>
+<tr> <td class="numLine"> 233</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 234</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param r1 The first resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 235</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param s1 The status for the first resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 236</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param r2 The second resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 237</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param s2 The status for the second resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 238</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param r3 The third resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 239</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param s3 The status for the third resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The result instance.</span></pre></td></tr>
+<tr> <td class="numLine"> 241</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 242</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> AuthzResult of(String r1, AuthzStatus s1, String r2, AuthzStatus s2,</pre></td></tr>
+<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String r3, AuthzStatus s3) {</pre></td></tr>
+<tr> <td class="numLineCover"> 244</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> AuthzResult.builder()</span></pre></td></tr>
+<tr> <td class="numLine"> 245</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .put(r1, s1)</pre></td></tr>
+<tr> <td class="numLine"> 246</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .put(r2, s2)</pre></td></tr>
+<tr> <td class="numLine"> 247</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .put(r3, s3)</pre></td></tr>
+<tr> <td class="numLine"> 248</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .build();</pre></td></tr>
+<tr> <td class="numLine"> 249</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 250</td> <td class="nbHits"> </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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 252</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get an {@link AuthzResult} with four entries.</span></pre></td></tr>
+<tr> <td class="numLine"> 253</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 254</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param r1 The first resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 255</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param s1 The status for the first resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 256</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param r2 The second resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param s2 The status for the second resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 258</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param r3 The third resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param s3 The status for the third resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 260</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param r4 The fourth resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 261</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param s4 The status for the fourth resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The result instance.</span></pre></td></tr>
+<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 264</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> AuthzResult of(String r1, AuthzStatus s1, String r2, AuthzStatus s2,</pre></td></tr>
+<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String r3, AuthzStatus s3, String r4, AuthzStatus s4) {</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">return</span> AuthzResult.builder()</span></pre></td></tr>
+<tr> <td class="numLine"> 267</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .put(r1, s1)</pre></td></tr>
+<tr> <td class="numLine"> 268</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .put(r2, s2)</pre></td></tr>
+<tr> <td class="numLine"> 269</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .put(r3, s3)</pre></td></tr>
+<tr> <td class="numLine"> 270</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .put(r4, s4)</pre></td></tr>
+<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .build();</pre></td></tr>
+<tr> <td class="numLine"> 272</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 273</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 274</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Set<String> keySet() {</pre></td></tr>
+<tr> <td class="numLineCover"> 276</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> statusMap.keySet();</span></pre></td></tr>
+<tr> <td class="numLine"> 277</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 278</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 279</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 280</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Set<Map.Entry<String, AuthzStatus>> entrySet() {</pre></td></tr>
+<tr> <td class="numLineCover"> 281</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> statusMap.entrySet();</span></pre></td></tr>
+<tr> <td class="numLine"> 282</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 283</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 284</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 285</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> size() {</pre></td></tr>
+<tr> <td class="numLineCover"> 286</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> statusMap.size();</span></pre></td></tr>
+<tr> <td class="numLine"> 287</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 288</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 289</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 290</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AuthzStatus get(Object resource) {</pre></td></tr>
+<tr> <td class="numLineCover"> 291</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> statusMap.get(resource);</span></pre></td></tr>
+<tr> <td class="numLine"> 292</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 293</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 294</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 295</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> containsKey(Object key) {</pre></td></tr>
+<tr> <td class="numLineCover"> 296</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> statusMap.containsKey(key);</span></pre></td></tr>
+<tr> <td class="numLine"> 297</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 298</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 299</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 300</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> containsValue(Object value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 301</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> statusMap.containsValue(value);</span></pre></td></tr>
+<tr> <td class="numLine"> 302</td> <td class="nbHits"> </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"> </pre></td></tr>
+<tr> <td class="numLine"> 304</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 305</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> isEmpty() {</pre></td></tr>
+<tr> <td class="numLineCover"> 306</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> statusMap.isEmpty();</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="numLine"> 308</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 309</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 310</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Collection<AuthzStatus> values() {</pre></td></tr>
+<tr> <td class="numLineCover"> 311</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> statusMap.values();</span></pre></td></tr>
+<tr> <td class="numLine"> 312</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 313</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 314</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</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">boolean</span> equals(Object object) {</pre></td></tr>
+<tr> <td class="numLineCover"> 316</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> statusMap.equals(object);</span></pre></td></tr>
+<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 319</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 320</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"> 321</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> statusMap.hashCode();</span></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="numLine"> 323</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 324</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 325</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> clear() {</pre></td></tr>
+<tr> <td class="numLineCover"> 326</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> UnsupportedOperationException();</span></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"> 328</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 329</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 330</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AuthzStatus put(String key, AuthzStatus value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 331</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 332</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 333</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 334</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 335</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> putAll(Map<? <span class="keyword">extends</span> String, ? <span class="keyword">extends</span> AuthzStatus> m) {</pre></td></tr>
+<tr> <td class="numLineCover"> 336</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 337</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 338</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 339</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 340</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AuthzStatus remove(Object key) {</pre></td></tr>
+<tr> <td class="numLineCover"> 341</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> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 342</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 345</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"> 346</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> StringBuilder builder = <span class="keyword">new</span> StringBuilder();</span></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">boolean</span> firstElt = <span class="keyword">true</span>;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 348</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">"{"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 349</td> <td class="nbHitsUncovered"><a title="Line 349: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 349: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (String resource : Ordering.natural().sortedCopy(statusMap.keySet())) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 350</td> <td class="nbHitsUncovered"><a title="Line 350: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 350: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!firstElt) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 351</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">','</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 352</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 353</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> firstElt = <span class="keyword">false</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 354</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 355</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">"\n \""</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 356</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(resource);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 357</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">"\", "</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 358</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(statusMap.get(resource));</span></pre></td></tr>
+<tr> <td class="numLine"> 359</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 360</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.append(<span class="string">"\n}"</span>);</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">return</span> builder.toString();</span></pre></td></tr>
+<tr> <td class="numLine"> 362</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 363</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.modules.SamlClient.html b/coverage/com.google.enterprise.adaptor.secmgr.modules.SamlClient.html
new file mode 100644
index 0000000..9684fc5
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.modules.SamlClient.html
@@ -0,0 +1,1063 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.modules.SamlClient</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.modules.SamlClient.html">SamlClient</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">118</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:37px"><span class="text">70/188</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">41</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:21px"><span class="text">11/52</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.3636363636363638;</span>3.364</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.modules.SamlClient.html">SamlClient$DecodedAuthzResponse</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/4</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.3636363636363638;</span>3.364</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.modules.SamlClient.html">SamlClient$RedirectEncoder</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">11</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:35px"><span class="text">6/17</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">7</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:12px"><span class="text">1/8</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.3636363636363638;</span>3.364</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2009 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.modules;</pre></td></tr>
+<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> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.initializeLocalEntity;</pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.initializePeerEntity;</pre></td></tr>
+<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeAction;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeArtifactResolve;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeAuthnRequest;</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeAuthzDecisionQuery;</pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeSamlMessageContext;</pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.makeSubject;</pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.runDecoder;</pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.runEncoder;</pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> org.opensaml.common.xml.SAMLConstants.SAML20P_NS;</pre></td></tr>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> org.opensaml.common.xml.SAMLConstants.SAML2_REDIRECT_BINDING_URI;</pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> org.opensaml.common.xml.SAMLConstants.SAML2_SOAP11_BINDING_URI;</pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.base.Preconditions;</pre></td></tr>
+<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.collect.Maps;</pre></td></tr>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.common.AuthzStatus;</pre></td></tr>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.http.HttpClientInterface;</pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.http.HttpExchange;</pre></td></tr>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextDecoder;</pre></td></tr>
+<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextEncoder;</pre></td></tr>
+<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToInTransport;</pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToOutTransport;</pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.saml.SamlLogUtil;</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">import</span> org.joda.time.DateTime;</pre></td></tr>
+<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.SAMLObject;</pre></td></tr>
+<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.binding.SAMLMessageContext;</pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.xml.SAMLConstants;</pre></td></tr>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.binding.decoding.HTTPSOAP11Decoder;</pre></td></tr>
+<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.binding.encoding.HTTPRedirectDeflateEncoder;</pre></td></tr>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.binding.encoding.HTTPSOAP11Encoder;</pre></td></tr>
+<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Action;</pre></td></tr>
+<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.ArtifactResolve;</pre></td></tr>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.ArtifactResponse;</pre></td></tr>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Assertion;</pre></td></tr>
+<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.AuthnRequest;</pre></td></tr>
+<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.AuthzDecisionQuery;</pre></td></tr>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.AuthzDecisionStatement;</pre></td></tr>
+<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.DecisionTypeEnumeration;</pre></td></tr>
+<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.NameID;</pre></td></tr>
+<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Response;</pre></td></tr>
+<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Statement;</pre></td></tr>
+<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.StatusCode;</pre></td></tr>
+<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.metadata.ArtifactResolutionService;</pre></td></tr>
+<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.metadata.AssertionConsumerService;</pre></td></tr>
+<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.metadata.AuthzService;</pre></td></tr>
+<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.metadata.EntityDescriptor;</pre></td></tr>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.metadata.SPSSODescriptor;</pre></td></tr>
+<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.metadata.SingleSignOnService;</pre></td></tr>
+<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.util.URLBuilder;</pre></td></tr>
+<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.message.encoder.MessageEncoder;</pre></td></tr>
+<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.message.encoder.MessageEncodingException;</pre></td></tr>
+<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.transport.http.HTTPInTransport;</pre></td></tr>
+<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.transport.http.HTTPOutTransport;</pre></td></tr>
+<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.credential.Credential;</pre></td></tr>
+<tr> <td class="numLine"> 73</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.util.Pair;</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"> <span class="keyword">import</span> java.io.IOException;</pre></td></tr>
+<tr> <td class="numLine"> 76</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"> 77</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"> 78</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"> 79</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Collection;</pre></td></tr>
+<tr> <td class="numLine"> 80</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"> 81</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"> 82</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"> 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">import</span> javax.annotation.concurrent.GuardedBy;</pre></td></tr>
+<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.concurrent.ThreadSafe;</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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * A library implementing most of the functionality of a SAML service provider.</span></pre></td></tr>
+<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * This library knows how to send an authentication request via the redirect</span></pre></td></tr>
+<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * binding, and to receive a response via either artifact or POST binding.</span></pre></td></tr>
+<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"> 92</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @ThreadSafe</pre></td></tr>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> SamlClient {</pre></td></tr>
+<tr> <td class="numLineCover"> 94</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 LOGGER = Logger.getLogger(SamlClient.<span class="keyword">class</span>.getName());</pre></td></tr>
+<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> EntityDescriptor localEntity;</pre></td></tr>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> EntityDescriptor peerEntity;</pre></td></tr>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> String providerName;</pre></td></tr>
+<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Credential signingCredential;</pre></td></tr>
+<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> HttpClientInterface httpClient;</pre></td></tr>
+<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">int</span> timeout;</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="numLine"> 103</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @GuardedBy(<span class="string">"requestIdLock"</span>)</pre></td></tr>
+<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> String requestId;</pre></td></tr>
+<tr> <td class="numLineCover"> 105</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> Object requestIdLock = <span class="keyword">new</span> Object();</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">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Create an instance of the client library.</span></pre></td></tr>
+<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param localEntity Metadata for the the local entity (the service provider</span></pre></td></tr>
+<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * using this library).</span></pre></td></tr>
+<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param peerEntity Metadata for the peer entity (the SAML IdP).</span></pre></td></tr>
+<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param providerName Descriptive name of the service provider.</span></pre></td></tr>
+<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param signingCredential A credential to use for signing the outgoing</span></pre></td></tr>
+<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * request. May be null if signing isn't needed.</span></pre></td></tr>
+<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param httpClient An HTTP client to use for resolving any artifact returned</span></pre></td></tr>
+<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * from the IdP. May be null if the artifact binding isn't being used.</span></pre></td></tr>
+<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> SamlClient(EntityDescriptor localEntity, EntityDescriptor peerEntity,</pre></td></tr>
+<tr> <td class="numLineCover"> 120</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> String providerName, Credential signingCredential, HttpClientInterface httpClient) {</pre></td></tr>
+<tr> <td class="numLineCover"> 121</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.localEntity = localEntity;</pre></td></tr>
+<tr> <td class="numLineCover"> 122</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.peerEntity = peerEntity;</pre></td></tr>
+<tr> <td class="numLineCover"> 123</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.providerName = providerName;</pre></td></tr>
+<tr> <td class="numLineCover"> 124</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.signingCredential = signingCredential;</pre></td></tr>
+<tr> <td class="numLineCover"> 125</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.httpClient = httpClient;</pre></td></tr>
+<tr> <td class="numLineCover"> 126</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> timeout = -1;</pre></td></tr>
+<tr> <td class="numLineCover"> 127</td> <td class="nbHitsCovered"> 10</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>
+<tr> <td class="numLine"> 129</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>
+ <td class="src"><pre class="src"> <span class="comment"> * Create an instance of the client library.</span></pre></td></tr>
+<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 132</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param localEntity Metadata for the the local entity (the service provider</span></pre></td></tr>
+<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * using this library).</span></pre></td></tr>
+<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param peerEntity Metadata for the peer entity (the SAML IdP).</span></pre></td></tr>
+<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param providerName Descriptive name of the service provider.</span></pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param signingCredential A credential to use for signing the outgoing</span></pre></td></tr>
+<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * request. May be null if signing isn't needed.</span></pre></td></tr>
+<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param httpClient An HTTP client to use for resolving any artifact returned</span></pre></td></tr>
+<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * from the IdP. May be null if the artifact binding isn't being</span></pre></td></tr>
+<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param timeout The http socket timeout value in milliseconds.</span></pre></td></tr>
+<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * -1 means to use the httpClient default timeout.</span></pre></td></tr>
+<tr> <td class="numLine"> 142</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> SamlClient(EntityDescriptor localEntity, EntityDescriptor peerEntity,</pre></td></tr>
+<tr> <td class="numLine"> 144</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String providerName, Credential signingCredential, HttpClientInterface httpClient,</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">int</span> timeout) {</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 class="keyword">this</span>.localEntity = localEntity;</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 class="keyword">this</span>.peerEntity = peerEntity;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 148</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.providerName = providerName;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 149</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.signingCredential = signingCredential;</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">this</span>.httpClient = httpClient;</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">this</span>.timeout = timeout;</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></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="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 155</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get the metadata for this client's local entity.</span></pre></td></tr>
+<tr> <td class="numLine"> 156</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The entity descriptor for the local entity.</span></pre></td></tr>
+<tr> <td class="numLine"> 158</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> EntityDescriptor getLocalEntity() {</pre></td></tr>
+<tr> <td class="numLineCover"> 160</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">return</span> localEntity;</pre></td></tr>
+<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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="numLine"> 163</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 164</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get the metadata for this client's peer entity.</span></pre></td></tr>
+<tr> <td class="numLine"> 165</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The entity descriptor for the peer entity.</span></pre></td></tr>
+<tr> <td class="numLine"> 167</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 168</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> EntityDescriptor getPeerEntity() {</pre></td></tr>
+<tr> <td class="numLineCover"> 169</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> <span class="keyword">return</span> peerEntity;</pre></td></tr>
+<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 171</td> <td class="nbHits"> </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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 173</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get the message ID of the most recent request.</span></pre></td></tr>
+<tr> <td class="numLine"> 174</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The message ID of the most recent request, never null.</span></pre></td></tr>
+<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"> 177</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getRequestId() {</pre></td></tr>
+<tr> <td class="numLineCover"> 178</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (requestIdLock) {</pre></td></tr>
+<tr> <td class="numLineCover"> 179</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> Preconditions.checkNotNull(requestId);</pre></td></tr>
+<tr> <td class="numLineCover"> 180</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">return</span> requestId;</pre></td></tr>
+<tr> <td class="numLineCover"> 181</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></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>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 184</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 185</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get the metadata for this client's local POST assertion consumer service.</span></pre></td></tr>
+<tr> <td class="numLine"> 186</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 187</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The assertion consumer service descriptor.</span></pre></td></tr>
+<tr> <td class="numLine"> 188</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 189</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AssertionConsumerService getPostAssertionConsumerService() {</pre></td></tr>
+<tr> <td class="numLineCover"> 190</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> getAssertionConsumerService(SAMLConstants.SAML2_POST_BINDING_URI);</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 193</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 194</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get the metadata for this client's local ARTIFACT assertion consumer service.</span></pre></td></tr>
+<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"> 196</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The assertion consumer service descriptor.</span></pre></td></tr>
+<tr> <td class="numLine"> 197</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>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AssertionConsumerService getArtifactAssertionConsumerService() {</pre></td></tr>
+<tr> <td class="numLineCover"> 199</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> getAssertionConsumerService(SAMLConstants.SAML2_ARTIFACT_BINDING_URI);</pre></td></tr>
+<tr> <td class="numLine"> 200</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 201</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 202</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> AssertionConsumerService getAssertionConsumerService(String binding) {</pre></td></tr>
+<tr> <td class="numLine"> 203</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">for</span> (AssertionConsumerService acs :</pre></td></tr>
+<tr> <td class="numLineCover"> 204</td> <td class="nbHitsUncovered"><a title="Line 204: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 204: Conditional coverage 50% (1/2)."> localEntity.getSPSSODescriptor(SAML20P_NS).getAssertionConsumerServices()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 205</td> <td class="nbHitsUncovered"><a title="Line 205: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 205: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (binding.equals(acs.getBinding())) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 206</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> acs;</pre></td></tr>
+<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 208</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 209</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"No assertion consumer with binding "</span> + binding);</span></pre></td></tr>
+<tr> <td class="numLine"> 210</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 211</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 212</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Send an AuthnRequest message to the IdP via the redirect protocol.</span></pre></td></tr>
+<tr> <td class="numLine"> 214</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 215</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param response The HTTP response message that will be filled with the encoded redirect.</span></pre></td></tr>
+<tr> <td class="numLine"> 216</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException if errors occur during the encoding.</span></pre></td></tr>
+<tr> <td class="numLine"> 217</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> sendAuthnRequest(HTTPOutTransport outTransport)</pre></td></tr>
+<tr> <td class="numLine"> 219</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 220</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> SAMLMessageContext<SAMLObject, AuthnRequest, NameID> context = makeSamlMessageContext();</pre></td></tr>
+<tr> <td class="numLine"> 221</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 222</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> SPSSODescriptor sp = localEntity.getSPSSODescriptor(SAML20P_NS);</pre></td></tr>
+<tr> <td class="numLineCover"> 223</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> initializeLocalEntity(context, localEntity, sp);</pre></td></tr>
+<tr> <td class="numLineCover"> 224</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> initializePeerEntity(context, peerEntity, peerEntity.getIDPSSODescriptor(SAML20P_NS),</pre></td></tr>
+<tr> <td class="numLine"> 225</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SingleSignOnService.DEFAULT_ELEMENT_NAME,</pre></td></tr>
+<tr> <td class="numLine"> 226</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SAML2_REDIRECT_BINDING_URI);</pre></td></tr>
+<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 228</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Generate the request</span></pre></td></tr>
+<tr> <td class="numLineCover"> 229</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> AuthnRequest authnRequest =</pre></td></tr>
+<tr> <td class="numLine"> 230</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeAuthnRequest(context.getOutboundMessageIssuer(), <span class="keyword">new</span> DateTime());</pre></td></tr>
+<tr> <td class="numLineCover"> 231</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> authnRequest.setProviderName(providerName);</pre></td></tr>
+<tr> <td class="numLineCover"> 232</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> authnRequest.setIsPassive(<span class="keyword">false</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 233</td> <td class="nbHitsUncovered"><a title="Line 233: Conditional coverage 50% (1/2)."> 10</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 233: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (signingCredential != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 234</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> authnRequest.setAssertionConsumerServiceURL(</span></pre></td></tr>
+<tr> <td class="numLine"> 235</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> sp.getDefaultAssertionConsumerService().getLocation());</pre></td></tr>
+<tr> <td class="numLineCover"> 236</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> authnRequest.setProtocolBinding(</span></pre></td></tr>
+<tr> <td class="numLine"> 237</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> sp.getDefaultAssertionConsumerService().getBinding());</pre></td></tr>
+<tr> <td class="numLine"> 238</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Must sign the message in order for ACS URL to be trusted by peer.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 239</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setOutboundSAMLMessageSigningCredential(signingCredential);</span></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="numLineCover"> 241</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> authnRequest.setDestination(context.getPeerEntityEndpoint().getLocation());</pre></td></tr>
+<tr> <td class="numLineCover"> 242</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> context.setOutboundSAMLMessage(authnRequest);</pre></td></tr>
+<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 244</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Remember the request ID for later.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 245</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">synchronized</span> (requestIdLock) {</pre></td></tr>
+<tr> <td class="numLineCover"> 246</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> requestId = authnRequest.getID();</pre></td></tr>
+<tr> <td class="numLineCover"> 247</td> <td class="nbHitsCovered"> 10</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"> </pre></td></tr>
+<tr> <td class="numLine"> 249</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Not needed:</span></pre></td></tr>
+<tr> <td class="numLine"> 250</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//context.setRelayState();</span></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">// Send the request via redirect to the user agent</span></pre></td></tr>
+<tr> <td class="numLine"> 253</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//ServletBase.initResponse(response);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 254</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> context.setOutboundMessageTransport(outTransport);</pre></td></tr>
+<tr> <td class="numLineCover"> 255</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> runEncoder(<span class="keyword">new</span> RedirectEncoder(), context);</pre></td></tr>
+<tr> <td class="numLineCover"> 256</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 258</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Decode a SAML response sent via the artifact binding.</span></pre></td></tr>
+<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"> 261</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param request The HTTP request containing the artifact.</span></pre></td></tr>
+<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The decoded response, or null if there was an error decoding the message. In</span></pre></td></tr>
+<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * this case, a log file entry is generated, so the caller doesn't need to know the</span></pre></td></tr>
+<tr> <td class="numLine"> 264</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * details of the failure.</span></pre></td></tr>
+<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException for various errors related to session and metadata, or for the</span></pre></td></tr>
+<tr> <td class="numLine"> 266</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * artifact resolution interchange.</span></pre></td></tr>
+<tr> <td class="numLine"> 267</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 268</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Response decodeArtifactResponse(URI requestUri, HTTPInTransport inTransport)</pre></td></tr>
+<tr> <td class="numLine"> 269</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLine"> 270</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// The OpenSAML HTTPArtifactDecoder isn't implemented, so we must manually decode the</span></pre></td></tr>
+<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// artifact.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 272</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String query = requestUri.getQuery();</pre></td></tr>
+<tr> <td class="numLineCover"> 273</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String artifact = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 274</td> <td class="nbHitsUncovered"><a title="Line 274: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 274: Conditional coverage 50% (1/2)."> <span class="keyword">for</span> (String kvPair : query.split(<span class="string">"&"</span>)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 275</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String[] kv = kvPair.split(<span class="string">"="</span>, 2);</pre></td></tr>
+<tr> <td class="numLineCover"> 276</td> <td class="nbHitsUncovered"><a title="Line 276: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 276: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (kv.length != 2) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 277</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">continue</span>;</span></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="numLineCover"> 279</td> <td class="nbHitsUncovered"><a title="Line 279: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 279: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!<span class="string">"SAMLart"</span>.equals(kv[0])) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 280</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">continue</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 281</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 282</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> artifact = kv[1];</pre></td></tr>
+<tr> <td class="numLineCover"> 283</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 284</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 285</td> <td class="nbHitsUncovered"><a title="Line 285: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 285: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (artifact == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 286</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.warning(<span class="string">"No artifact in message"</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"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 288</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 289</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 290</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> SAMLObject message = resolveArtifact(inTransport, artifact);</pre></td></tr>
+<tr> <td class="numLineCover"> 291</td> <td class="nbHitsCovered"><a title="Line 291: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 291: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!(message <span class="keyword">instanceof</span> Response)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 292</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> LOGGER.warning(<span class="string">"Unable to resolve artifact"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 293</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 294</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> (Response) message;</pre></td></tr>
+<tr> <td class="numLine"> 295</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 296</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 297</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 298</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Resolve a SAML artifact.</span></pre></td></tr>
+<tr> <td class="numLine"> 299</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 300</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param session The authentication session.</span></pre></td></tr>
+<tr> <td class="numLine"> 301</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param request The HTTP request containing the artifact, to identify the artifact</span></pre></td></tr>
+<tr> <td class="numLine"> 302</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * resolution service to use.</span></pre></td></tr>
+<tr> <td class="numLine"> 303</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param artifact The artifact to resolve.</span></pre></td></tr>
+<tr> <td class="numLine"> 304</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The SAML object that the artifact resolves to.</span></pre></td></tr>
+<tr> <td class="numLine"> 305</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException</span></pre></td></tr>
+<tr> <td class="numLine"> 306</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 307</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> SAMLObject resolveArtifact(HTTPInTransport inTransport,</pre></td></tr>
+<tr> <td class="numLine"> 308</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String artifact)</pre></td></tr>
+<tr> <td class="numLine"> 309</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLine"> 310</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Establish the SAML message context.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 311</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> SAMLMessageContext<ArtifactResponse, ArtifactResolve, NameID> context =</pre></td></tr>
+<tr> <td class="numLine"> 312</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlMessageContext();</pre></td></tr>
+<tr> <td class="numLine"> 313</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 314</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> initializeLocalEntity(context, localEntity, localEntity.getSPSSODescriptor(SAML20P_NS));</pre></td></tr>
+<tr> <td class="numLineCover"> 315</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> initializePeerEntity(context, peerEntity, peerEntity.getIDPSSODescriptor(SAML20P_NS),</pre></td></tr>
+<tr> <td class="numLine"> 316</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ArtifactResolutionService.DEFAULT_ELEMENT_NAME,</pre></td></tr>
+<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SAML2_SOAP11_BINDING_URI);</pre></td></tr>
+<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 319</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Generate the request.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 320</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> context.setOutboundSAMLMessage(</pre></td></tr>
+<tr> <td class="numLine"> 321</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeArtifactResolve(localEntity.getEntityID(), <span class="keyword">new</span> DateTime(), artifact));</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="numLine"> 323</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Encode the request.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 324</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> HttpExchange exchange =</pre></td></tr>
+<tr> <td class="numLine"> 325</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> httpClient.postExchange(<span class="keyword">new</span> URL(context.getPeerEntityEndpoint().getLocation()), <span class="keyword">null</span>);</pre></td></tr>
+<tr> <td class="numLine"> 326</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 327</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> HttpExchangeToOutTransport out = <span class="keyword">new</span> HttpExchangeToOutTransport(exchange);</pre></td></tr>
+<tr> <td class="numLine"> 328</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 329</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> context.setOutboundMessageTransport(out);</pre></td></tr>
+<tr> <td class="numLineCover"> 330</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> context.setRelayState(inTransport.getHeaderValue(<span class="string">"RelayState"</span>));</pre></td></tr>
+<tr> <td class="numLineCover"> 331</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> runEncoder(<span class="keyword">new</span> HTTPSOAP11Encoder(), context);</pre></td></tr>
+<tr> <td class="numLine"> 332</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 333</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> out.finish();</pre></td></tr>
+<tr> <td class="numLineCover"> 334</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 335</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 336</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> exchange.close();</pre></td></tr>
+<tr> <td class="numLineCover"> 337</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 338</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 339</td> <td class="nbHitsUncovered"><a title="Line 339: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 339: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (timeout != -1) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 340</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> exchange.setTimeout(timeout);</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 343</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Do HTTP exchange.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 344</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">int</span> status = exchange.exchange();</pre></td></tr>
+<tr> <td class="numLineCover"> 345</td> <td class="nbHitsUncovered"><a title="Line 345: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 345: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (status != HttpURLConnection.HTTP_OK) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 346</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.warning(<span class="string">"Incorrect HTTP status: "</span> + status);</span></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> <span class="keyword">null</span>;</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 350</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Decode the response.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 351</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> context.setInboundMessageTransport(<span class="keyword">new</span> HttpExchangeToInTransport(exchange));</pre></td></tr>
+<tr> <td class="numLine"> 352</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 353</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> runDecoder(<span class="keyword">new</span> HTTPSOAP11Decoder(), context);</pre></td></tr>
+<tr> <td class="numLineCover"> 354</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 355</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.warning(<span class="string">"IOException: "</span> + e.getMessage());</span></pre></td></tr>
+<tr> <td class="numLineCover"> 356</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 357</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 358</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 359</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Return the decoded response.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 360</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> ArtifactResponse artifactResponse = context.getInboundSAMLMessage();</pre></td></tr>
+<tr> <td class="numLineCover"> 361</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> Preconditions.checkNotNull(artifactResponse, <span class="string">"Decoded SAML response is null"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 362</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> artifactResponse.getMessage();</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"> 364</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 365</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 366</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Send a single SAML-standard authorization request.</span></pre></td></tr>
+<tr> <td class="numLine"> 367</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 368</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param urlString The URL for which access is being authorized.</span></pre></td></tr>
+<tr> <td class="numLine"> 369</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param username The username to test for access.</span></pre></td></tr>
+<tr> <td class="numLine"> 370</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The authorization status.</span></pre></td></tr>
+<tr> <td class="numLine"> 371</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException if there are any I/O errors during authorization.</span></pre></td></tr>
+<tr> <td class="numLine"> 372</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 373</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AuthzStatus sendAuthzRequest(String urlString, String username)</pre></td></tr>
+<tr> <td class="numLine"> 374</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 375</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Preconditions.checkNotNull(urlString);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 376</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Preconditions.checkNotNull(username);</span></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="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> SAMLMessageContext<Response, AuthzDecisionQuery, NameID> context = makeAuthzContext();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 379</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HttpExchange exchange = makeAuthzExchange(context);</span></pre></td></tr>
+<tr> <td class="numLine"> 380</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLine"> 381</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 382</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HttpExchangeToOutTransport out = <span class="keyword">new</span> HttpExchangeToOutTransport(exchange);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 383</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> setupAuthzQuery(context, urlString, username, <span class="keyword">new</span> DateTime(), out, <span class="keyword">new</span> HTTPSOAP11Encoder());</span></pre></td></tr>
+<tr> <td class="numLineCover"> 384</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> out.finish();</span></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">// Do HTTP exchange</span></pre></td></tr>
+<tr> <td class="numLineCover"> 387</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> status = exchange.exchange();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 388</td> <td class="nbHitsUncovered"><a title="Line 388: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 388: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!isGoodHttpStatus(status)) {</a></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">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Incorrect HTTP status: "</span> + status);</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 392</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Decode the response</span></pre></td></tr>
+<tr> <td class="numLineCover"> 393</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HttpExchangeToInTransport in = <span class="keyword">new</span> HttpExchangeToInTransport(exchange);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 394</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setInboundMessageTransport(in);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 395</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> runDecoder(<span class="keyword">new</span> HTTPSOAP11Decoder(), context);</span></pre></td></tr>
+<tr> <td class="numLine"> 396</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 397</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 398</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> exchange.close();</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></pre></td></tr>
+<tr> <td class="numLine"> 400</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 401</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> DecodedAuthzResponse response = decodeAuthzResponse(context.getInboundSAMLMessage(), username);</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> (response == <span class="keyword">null</span>) {</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">return</span> AuthzStatus.INDETERMINATE;</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"> 405</td> <td class="nbHitsUncovered"><a title="Line 405: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 405: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!urlString.equals(response.resource)) {</a></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">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Wrong resource received (expected '"</span> + urlString</span></pre></td></tr>
+<tr> <td class="numLine"> 407</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"'): '"</span> + response.resource + <span class="string">"'"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 408</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 409</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> response.status;</span></pre></td></tr>
+<tr> <td class="numLine"> 410</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 411</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 412</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 413</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Send a (nonstandard) multiple SAML authorization request.</span></pre></td></tr>
+<tr> <td class="numLine"> 414</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 415</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param urlStrings The URLs for which access is being authorized.</span></pre></td></tr>
+<tr> <td class="numLine"> 416</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param username The username to test for access.</span></pre></td></tr>
+<tr> <td class="numLine"> 417</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The authorization responses.</span></pre></td></tr>
+<tr> <td class="numLine"> 418</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException if there are any I/O errors during authorization.</span></pre></td></tr>
+<tr> <td class="numLine"> 419</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 420</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AuthzResult sendMultiAuthzRequest(Collection<String> urlStrings,</pre></td></tr>
+<tr> <td class="numLine"> 421</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String username)</pre></td></tr>
+<tr> <td class="numLine"> 422</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 423</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Preconditions.checkNotNull(urlStrings);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 424</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Preconditions.checkNotNull(username);</span></pre></td></tr>
+<tr> <td class="numLine"> 425</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 426</td> <td class="nbHitsUncovered"><a title="Line 426: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 426: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (urlStrings.isEmpty()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 427</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> AuthzResult.makeIndeterminate(urlStrings);</span></pre></td></tr>
+<tr> <td class="numLine"> 428</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 429</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 430</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Establish the SAML message context.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 431</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> SAMLMessageContext<Response, AuthzDecisionQuery, NameID> context = makeAuthzContext();</span></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"> 433</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HTTPSOAP11MultiContextEncoder encoder = <span class="keyword">new</span> HTTPSOAP11MultiContextEncoder();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 434</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HttpExchange exchange = makeAuthzExchange(context);</span></pre></td></tr>
+<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"> 436</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HttpExchangeToOutTransport out = <span class="keyword">new</span> HttpExchangeToOutTransport(exchange);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 437</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> DateTime now = <span class="keyword">new</span> DateTime();</span></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"> 439</td> <td class="nbHitsUncovered"><a title="Line 439: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 439: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (String urlString : urlStrings) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 440</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> setupAuthzQuery(context, urlString, username, now, out, encoder);</span></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="numLine"> 442</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 443</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> encoder.finish();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 444</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (MessageEncodingException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 445</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(e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 446</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 447</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> out.finish();</span></pre></td></tr>
+<tr> <td class="numLine"> 448</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 449</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Do HTTP exchange</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">int</span> status = exchange.exchange();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 451</td> <td class="nbHitsUncovered"><a title="Line 451: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 451: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!isGoodHttpStatus(status)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 452</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">"Incorrect HTTP status: "</span> + status);</span></pre></td></tr>
+<tr> <td class="numLine"> 453</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 454</td> <td class="nbHits"> </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"> <span class="comment">// Decode the responses</span></pre></td></tr>
+<tr> <td class="numLineCover"> 456</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HttpExchangeToInTransport in = <span class="keyword">new</span> HttpExchangeToInTransport(exchange);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 457</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setInboundMessageTransport(in);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 458</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> HTTPSOAP11MultiContextDecoder decoder = <span class="keyword">new</span> HTTPSOAP11MultiContextDecoder();</span></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="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> AuthzResult.Builder builder = AuthzResult.builder(urlStrings);</span></pre></td></tr>
+<tr> <td class="numLine"> 461</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"> 462</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 463</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> runDecoder(decoder, context);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 464</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IndexOutOfBoundsException e) {</span></pre></td></tr>
+<tr> <td class="numLine"> 465</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// normal indication that there are no more messages to decode</span></pre></td></tr>
+<tr> <td class="numLineCover"> 466</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="numLineCover"> 467</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 468</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> DecodedAuthzResponse response</span></pre></td></tr>
+<tr> <td class="numLine"> 469</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = decodeAuthzResponse(context.getInboundSAMLMessage(), username);</pre></td></tr>
+<tr> <td class="numLineCover"> 470</td> <td class="nbHitsUncovered"><a title="Line 470: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 470: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (response != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 471</td> <td class="nbHitsUncovered"><a title="Line 471: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 471: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (urlStrings.contains(response.resource)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 472</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> builder.put(response.resource, response.status);</span></pre></td></tr>
+<tr> <td class="numLine"> 473</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 474</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.warning(<span class="string">"Unknown resource received: '"</span> + response.resource + <span class="string">"'"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 475</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 476</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 477</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</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">return</span> builder.build();</span></pre></td></tr>
+<tr> <td class="numLine"> 479</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 480</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 481</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> exchange.close();</span></pre></td></tr>
+<tr> <td class="numLine"> 482</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 483</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 484</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 485</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> SAMLMessageContext<Response, AuthzDecisionQuery, NameID> makeAuthzContext() {</pre></td></tr>
+<tr> <td class="numLine"> 486</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Establish the SAML message context.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 487</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> SAMLMessageContext<Response, AuthzDecisionQuery, NameID> context = makeSamlMessageContext();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 488</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> initializeLocalEntity(context, localEntity);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 489</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> initializePeerEntity(context, peerEntity,</span></pre></td></tr>
+<tr> <td class="numLine"> 490</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> peerEntity.getPDPDescriptor(SAMLConstants.SAML20P_NS),</pre></td></tr>
+<tr> <td class="numLine"> 491</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> AuthzService.DEFAULT_ELEMENT_NAME,</pre></td></tr>
+<tr> <td class="numLine"> 492</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SAML2_SOAP11_BINDING_URI);</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">return</span> context;</span></pre></td></tr>
+<tr> <td class="numLine"> 494</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 495</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 496</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> HttpExchange makeAuthzExchange(</pre></td></tr>
+<tr> <td class="numLine"> 497</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SAMLMessageContext<Response, AuthzDecisionQuery, NameID> context)</pre></td></tr>
+<tr> <td class="numLine"> 498</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</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">return</span> httpClient.postExchange(<span class="keyword">new</span> URL(context.getPeerEntityEndpoint().getLocation()), <span class="keyword">null</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 500</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 501</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 502</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> setupAuthzQuery(SAMLMessageContext<Response, AuthzDecisionQuery, NameID> context,</pre></td></tr>
+<tr> <td class="numLine"> 503</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String urlString, String username, DateTime instant, HTTPOutTransport out,</pre></td></tr>
+<tr> <td class="numLine"> 504</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> MessageEncoder encoder)</pre></td></tr>
+<tr> <td class="numLine"> 505</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 506</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> AuthzDecisionQuery query</span></pre></td></tr>
+<tr> <td class="numLine"> 507</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = makeAuthzDecisionQuery(</pre></td></tr>
+<tr> <td class="numLine"> 508</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> context.getOutboundMessageIssuer(),</pre></td></tr>
+<tr> <td class="numLine"> 509</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> instant,</pre></td></tr>
+<tr> <td class="numLine"> 510</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSubject(username),</pre></td></tr>
+<tr> <td class="numLine"> 511</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> urlString,</pre></td></tr>
+<tr> <td class="numLine"> 512</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeAction(Action.HTTP_GET_ACTION, Action.GHPP_NS_URI));</pre></td></tr>
+<tr> <td class="numLineCover"> 513</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.info(SamlLogUtil.xmlMessage(<span class="string">"AuthzDecisionQuery"</span>, query));</span></pre></td></tr>
+<tr> <td class="numLineCover"> 514</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setOutboundSAMLMessage(query);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 515</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> context.setOutboundMessageTransport(out);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 516</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> runEncoder(encoder, context);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 517</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 518</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 519</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> DecodedAuthzResponse decodeAuthzResponse(Response response, String username)</pre></td></tr>
+<tr> <td class="numLine"> 520</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 521</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.info(SamlLogUtil.xmlMessage(<span class="string">"response"</span>, response));</span></pre></td></tr>
+<tr> <td class="numLine"> 522</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 523</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String statusValue = response.getStatus().getStatusCode().getValue();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 524</td> <td class="nbHitsUncovered"><a title="Line 524: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 524: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!StatusCode.SUCCESS_URI.equals(statusValue)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 525</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.info(<span class="string">"Unsuccessful response received: "</span> + statusValue);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 526</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 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="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> List<Assertion> assertions = response.getAssertions();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 530</td> <td class="nbHitsUncovered"><a title="Line 530: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 530: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (assertions.size() != 1) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 531</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.warning(<span class="string">"Wrong number of assertions received (expected 1): "</span> + assertions.size());</span></pre></td></tr>
+<tr> <td class="numLineCover"> 532</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 533</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 534</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Assertion assertion = assertions.get(0);</span></pre></td></tr>
+<tr> <td class="numLine"> 535</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 536</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String responseUsername = assertion.getSubject().getNameID().getValue();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 537</td> <td class="nbHitsUncovered"><a title="Line 537: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 537: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!username.equals(responseUsername)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 538</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.warning(<span class="string">"Wrong username received (expected '"</span> + username + <span class="string">"'): '"</span></span></pre></td></tr>
+<tr> <td class="numLine"> 539</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + responseUsername + <span class="string">"'"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 540</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 541</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 542</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 543</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> List<Statement> statements = assertion.getStatements();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 544</td> <td class="nbHitsUncovered"><a title="Line 544: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 544: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (statements.size() != 1) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 545</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.warning(<span class="string">"Wrong number of statements received (expected 1): "</span> + statements.size());</span></pre></td></tr>
+<tr> <td class="numLineCover"> 546</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 547</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 548</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Statement statement = statements.get(0);</span></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="numLineCover"> 550</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> AuthzDecisionStatement authzDecisionStatement = AuthzDecisionStatement.<span class="keyword">class</span>.cast(statement);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 551</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> DecodedAuthzResponse(</span></pre></td></tr>
+<tr> <td class="numLine"> 552</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> authzDecisionStatement.getResource(),</pre></td></tr>
+<tr> <td class="numLine"> 553</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> mapDecision(authzDecisionStatement.getDecision()));</pre></td></tr>
+<tr> <td class="numLine"> 554</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 555</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 556</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">class</span> DecodedAuthzResponse {</pre></td></tr>
+<tr> <td class="numLine"> 557</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">final</span> String resource;</pre></td></tr>
+<tr> <td class="numLine"> 558</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">final</span> AuthzStatus status;</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="numLineCover"> 560</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">public</span> DecodedAuthzResponse(String resource, AuthzStatus status) {</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">this</span>.resource = resource;</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">this</span>.status = status;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 563</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 564</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 565</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 566</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> AuthzStatus mapDecision(DecisionTypeEnumeration decision) {</pre></td></tr>
+<tr> <td class="numLineCover"> 567</td> <td class="nbHitsUncovered"><a title="Line 567: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 567: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (decision == DecisionTypeEnumeration.PERMIT) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 568</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> AuthzStatus.PERMIT;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 569</td> <td class="nbHitsUncovered"><a title="Line 569: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 569: Conditional coverage 0% (0/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (decision == DecisionTypeEnumeration.DENY) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 570</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> AuthzStatus.DENY;</span></pre></td></tr>
+<tr> <td class="numLine"> 571</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 572</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> AuthzStatus.INDETERMINATE;</span></pre></td></tr>
+<tr> <td class="numLine"> 573</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 574</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 575</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 576</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 577</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * A tweaked redirect encoder that preserves query parameters from the endpoint URL.</span></pre></td></tr>
+<tr> <td class="numLine"> 578</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 579</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> <span class="keyword">class</span> RedirectEncoder <span class="keyword">extends</span> HTTPRedirectDeflateEncoder {</pre></td></tr>
+<tr> <td class="numLine"> 580</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 581</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> RedirectEncoder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 582</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">super</span>();</pre></td></tr>
+<tr> <td class="numLineCover"> 583</td> <td class="nbHitsCovered"> 10</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"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 586</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> String buildRedirectURL(@SuppressWarnings(<span class="string">"rawtypes"</span>) SAMLMessageContext context,</pre></td></tr>
+<tr> <td class="numLine"> 587</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String endpointUrl, String message)</pre></td></tr>
+<tr> <td class="numLine"> 588</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> MessageEncodingException {</pre></td></tr>
+<tr> <td class="numLineCover"> 589</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> String encodedUrl = <span class="keyword">super</span>.buildRedirectURL(context, endpointUrl, message);</pre></td></tr>
+<tr> <td class="numLine"> 590</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 591</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Get the query parameters from the endpoint URL.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 592</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> List<Pair<String, String>> endpointParams = <span class="keyword">new</span> URLBuilder(endpointUrl).getQueryParams();</pre></td></tr>
+<tr> <td class="numLineCover"> 593</td> <td class="nbHitsUncovered"><a title="Line 593: Conditional coverage 50% (1/2)."> 10</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 593: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (endpointParams.isEmpty()) {</a></span></pre></td></tr>
+<tr> <td class="numLine"> 594</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// If none, we're finished.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 595</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">return</span> encodedUrl;</pre></td></tr>
+<tr> <td class="numLine"> 596</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 597</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 598</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> URLBuilder builder = <span class="keyword">new</span> URLBuilder(encodedUrl);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 599</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> List<Pair<String, String>> samlParams = builder.getQueryParams();</span></pre></td></tr>
+<tr> <td class="numLine"> 600</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 601</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Merge the endpoint params with the SAML params.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 602</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Map<String, String> params = Maps.newHashMap();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 603</td> <td class="nbHitsUncovered"><a title="Line 603: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 603: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (Pair<String, String> entry : endpointParams) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 604</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> params.put(entry.getFirst(), entry.getSecond());</span></pre></td></tr>
+<tr> <td class="numLine"> 605</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 606</td> <td class="nbHitsUncovered"><a title="Line 606: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 606: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (Pair<String, String> entry : samlParams) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 607</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> params.put(entry.getFirst(), entry.getSecond());</span></pre></td></tr>
+<tr> <td class="numLine"> 608</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 609</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 610</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copy the merged params back into the result.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 611</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> samlParams.clear();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 612</td> <td class="nbHitsUncovered"><a title="Line 612: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 612: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (Map.Entry<String, String> entry : params.entrySet()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 613</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> samlParams.add(<span class="keyword">new</span> Pair<String, String>(entry.getKey(), entry.getValue()));</span></pre></td></tr>
+<tr> <td class="numLine"> 614</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 615</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> builder.buildURL();</span></pre></td></tr>
+<tr> <td class="numLine"> 616</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 617</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 618</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 619</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">boolean</span> isGoodHttpStatus(<span class="keyword">int</span> status) {</pre></td></tr>
+<tr> <td class="numLineCover"> 620</td> <td class="nbHitsUncovered"><a title="Line 620: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 620: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">return</span> status == HttpURLConnection.HTTP_OK</a></span></pre></td></tr>
+<tr> <td class="numLine"> 621</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> || status == HttpURLConnection.HTTP_PARTIAL;</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>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValue.html b/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValue.html
new file mode 100644
index 0000000..2e84820
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValue.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.saml.AttributeValue</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.AttributeValue.html">AttributeValue</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2009 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.saml;</pre></td></tr>
+<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="comment">// This is a necessary extension of the OpenSAML AttributeValue element.</span></pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">interface</span> AttributeValue</pre></td></tr>
+<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">extends</span> org.opensaml.saml2.core.AttributeValue {</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Set the content of the AttributeValue element.</span></pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Also sets the content type to xs:string.</span></pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param value The content value.</span></pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setValue(String value);</pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValueBuilder.html b/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValueBuilder.html
new file mode 100644
index 0000000..f3601f4
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValueBuilder.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.saml.AttributeValueBuilder</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueBuilder.html">AttributeValueBuilder</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">3/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2009 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.saml;</pre></td></tr>
+<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> org.opensaml.common.impl.AbstractSAMLObjectBuilder;</pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.AttributeValue;</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="comment">// This class should be part of OpenSAML but is missing from there.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 21</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> AttributeValueBuilder</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">extends</span> AbstractSAMLObjectBuilder<AttributeValue> {</pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AttributeValue buildObject() {</pre></td></tr>
+<tr> <td class="numLineCover"> 25</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> AttributeValueImpl();</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"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AttributeValue buildObject(String nsUri, String localName, String nsPrefix) {</pre></td></tr>
+<tr> <td class="numLineCover"> 30</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> AttributeValueImpl(nsUri, localName, nsPrefix);</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>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValueImpl.html b/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValueImpl.html
new file mode 100644
index 0000000..beed803
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValueImpl.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.saml.AttributeValueImpl</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueImpl.html">AttributeValueImpl</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">9/9</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2009 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.saml;</pre></td></tr>
+<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> org.opensaml.common.xml.SAMLConstants;</pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.AbstractExtensibleXMLObject;</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> javax.xml.XMLConstants;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.xml.namespace.QName;</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// This class should be part of OpenSAML but is missing from there.</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> <span class="keyword">class</span> AttributeValueImpl</pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">extends</span> AbstractExtensibleXMLObject</pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">implements</span> AttributeValue {</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="numLineCover"> 28</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> QName xsiType =</pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> QName(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, <span class="string">"type"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 30</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 xsString = <span class="string">"xs:string"</span>;</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"> <span class="keyword">private</span> String value;</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>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> AttributeValueImpl() {</pre></td></tr>
+<tr> <td class="numLineCover"> 35</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">super</span>(SAMLConstants.SAML20_NS,</pre></td></tr>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> DEFAULT_ELEMENT_LOCAL_NAME,</pre></td></tr>
+<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SAMLConstants.SAML20_PREFIX);</pre></td></tr>
+<tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</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"> <span class="keyword">public</span> AttributeValueImpl(String nsUri, String localName, String nsPrefix) {</pre></td></tr>
+<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">super</span>(nsUri, localName, nsPrefix);</pre></td></tr>
+<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getValue() {</pre></td></tr>
+<tr> <td class="numLineCover"> 45</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> value;</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"> </pre></td></tr>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setValue(String value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 49</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.value = prepareForAssignment(<span class="keyword">this</span>.value, value);</pre></td></tr>
+<tr> <td class="numLineCover"> 50</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.getUnknownAttributes().put(xsiType, xsString);</pre></td></tr>
+<tr> <td class="numLineCover"> 51</td> <td class="nbHitsCovered"> 3</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>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValueMarshaller.html b/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValueMarshaller.html
new file mode 100644
index 0000000..3644063
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValueMarshaller.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.saml.AttributeValueMarshaller</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueMarshaller.html">AttributeValueMarshaller</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">3/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2009 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.saml;</pre></td></tr>
+<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> org.opensaml.common.impl.AbstractSAMLObjectMarshaller;</pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.XMLObject;</pre></td></tr>
+<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.util.XMLHelper;</pre></td></tr>
+<tr> <td class="numLine"> 20</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"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// This class should be part of OpenSAML but is missing from there.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 23</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> AttributeValueMarshaller</pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">extends</span> AbstractSAMLObjectMarshaller {</pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">void</span> marshallElementContent(XMLObject xmlObject, Element domElement) {</pre></td></tr>
+<tr> <td class="numLineCover"> 27</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> XMLHelper.appendTextContent(domElement, AttributeValueImpl.<span class="keyword">class</span>.cast(xmlObject).getValue());</pre></td></tr>
+<tr> <td class="numLineCover"> 28</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValueUnmarshaller.html b/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValueUnmarshaller.html
new file mode 100644
index 0000000..703154d
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.saml.AttributeValueUnmarshaller.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.saml.AttributeValueUnmarshaller</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueUnmarshaller.html">AttributeValueUnmarshaller</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">3/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2009 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.saml;</pre></td></tr>
+<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> org.opensaml.common.impl.AbstractSAMLObjectUnmarshaller;</pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.XMLObject;</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="comment">// This class should be part of OpenSAML but is missing from there.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 21</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> AttributeValueUnmarshaller <span class="keyword">extends</span> AbstractSAMLObjectUnmarshaller {</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">void</span> processElementContent(XMLObject xmlObject, String elementContent) {</pre></td></tr>
+<tr> <td class="numLineCover"> 24</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> AttributeValueImpl.<span class="keyword">class</span>.cast(xmlObject).setValue(elementContent);</pre></td></tr>
+<tr> <td class="numLineCover"> 25</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextDecoder.html b/coverage/com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextDecoder.html
new file mode 100644
index 0000000..cbef16e
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextDecoder.html
@@ -0,0 +1,375 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextDecoder</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextDecoder.html">HTTPSOAP11MultiContextDecoder</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">22</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:60px"><span class="text">33/55</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">19</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:36px"><span class="text">11/30</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5555555555555554;</span>3.556</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2009 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.saml;</pre></td></tr>
+<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> org.opensaml.common.SAMLObject;</pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.binding.SAMLMessageContext;</pre></td></tr>
+<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.xml.SAMLConstants;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.binding.decoding.BaseSAML2MessageDecoder;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.message.MessageContext;</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.message.decoder.MessageDecodingException;</pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.soap.soap11.Envelope;</pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.soap.soap11.Header;</pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.transport.http.HTTPInTransport;</pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.AttributeExtensibleXMLObject;</pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.XMLObject;</pre></td></tr>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.parse.ParserPool;</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.opensaml.xml.util.DatatypeHelper;</pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 31</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"> 32</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>
+ <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"> </pre></td></tr>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.xml.namespace.QName;</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>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * SAML 2.0 SOAP 1.1 over HTTP MultiContext binding decoder.</span></pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Based on OpenSaml's HTTPSOAP11Decoder</span></pre></td></tr>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> HTTPSOAP11MultiContextDecoder <span class="keyword">extends</span> BaseSAML2MessageDecoder {</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="numLine"> 44</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/** Class logger. */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 45</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 = Logger.getLogger(HTTPSOAP11MultiContextDecoder.<span class="keyword">class</span>.getName());</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="comment">/** QNames of understood SOAP headers. */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 48</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> List<QName> understoodHeaders = <span class="keyword">new</span> ArrayList<QName>();</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="numLine"> 50</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/** QName of SOAP mustUnderstand header attribute. */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 51</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> QName soapMustUnderstand = <span class="keyword">new</span> QName(SAMLConstants.SOAP11ENV_NS, <span class="string">"mustUnderstand"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> Envelope soapMessage;</pre></td></tr>
+<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> List<XMLObject> soapBodyChildren;</pre></td></tr>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">int</span> thisChild;</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"> <span class="comment">/** Constructor. */</span></pre></td></tr>
+<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> HTTPSOAP11MultiContextDecoder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 59</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">super</span>();</pre></td></tr>
+<tr> <td class="numLineCover"> 60</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Constructor.</span></pre></td></tr>
+<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param pool parser pool used to deserialize messages</span></pre></td></tr>
+<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> HTTPSOAP11MultiContextDecoder(ParserPool pool) {</pre></td></tr>
+<tr> <td class="numLineCover"> 68</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">super</span>(pool);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 69</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getBindingURI() {</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">return</span> SAMLConstants.SAML2_SOAP11_BINDING_URI;</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">boolean</span> isIntendedDestinationEndpointURIRequired(</pre></td></tr>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @SuppressWarnings(<span class="string">"rawtypes"</span>) SAMLMessageContext samlMsgCtx) {</pre></td></tr>
+<tr> <td class="numLineCover"> 78</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">false</span>;</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"> </pre></td></tr>
+<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets the SOAP header names that are understood by the application.</span></pre></td></tr>
+<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return SOAP header names that are understood by the application</span></pre></td></tr>
+<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> List<QName> getUnderstoodHeaders() {</pre></td></tr>
+<tr> <td class="numLineCover"> 87</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> understoodHeaders;</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="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Sets the SOAP header names that are understood by the application.</span></pre></td></tr>
+<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param headerNames SOAP header names that are understood by the application</span></pre></td></tr>
+<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setUnderstoodHeaders(List<QName> headerNames) {</pre></td></tr>
+<tr> <td class="numLineCover"> 96</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> understoodHeaders.clear();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 97</td> <td class="nbHitsUncovered"><a title="Line 97: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 97: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (headerNames != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 98</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> understoodHeaders.addAll(headerNames);</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="numLineCover"> 100</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></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="numLine"> 102</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">void</span> doDecode(MessageContext messageContext) <span class="keyword">throws</span> MessageDecodingException {</pre></td></tr>
+<tr> <td class="numLineCover"> 104</td> <td class="nbHitsUncovered"><a title="Line 104: Conditional coverage 50% (1/2)."> 33</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 104: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!(messageContext <span class="keyword">instanceof</span> SAMLMessageContext<?, ?, ?>)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 105</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> MessageDecodingException(</span></pre></td></tr>
+<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Invalid message context type, this decoder only support SAMLMessageContext"</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"> @SuppressWarnings(<span class="string">"unchecked"</span>)</pre></td></tr>
+<tr> <td class="numLineCover"> 109</td> <td class="nbHitsCovered"> 33</td> <td class="src"><pre class="src"> SAMLMessageContext<SAMLObject, SAMLObject, SAMLObject> samlMsgCtx =</pre></td></tr>
+<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> (SAMLMessageContext<SAMLObject, SAMLObject, SAMLObject>) messageContext;</pre></td></tr>
+<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 112</td> <td class="nbHitsCovered"> 33</td> <td class="src"><pre class="src"> samlMsgCtx.setInboundMessage(soapMessage);</pre></td></tr>
+<tr> <td class="numLineCover"> 113</td> <td class="nbHitsCovered"><a title="Line 113: Conditional coverage 100% (2/2)."> 33</a></td> <td class="src"><pre class="src"> <a title="Line 113: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (soapMessage == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 114</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> start(samlMsgCtx);</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="numLine"> 116</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)."> 32</a></td> <td class="src"><pre class="src"> <a title="Line 117: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (soapBodyChildren.size() < 1) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> MessageDecodingException(</pre></td></tr>
+<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Unexpected number of children in the SOAP body, "</span> + soapBodyChildren.size()</pre></td></tr>
+<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">". Unable to extract SAML message"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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"> 123</td> <td class="nbHitsCovered"><a title="Line 123: Conditional coverage 100% (2/2)."> 31</a></td> <td class="src"><pre class="src"> <a title="Line 123: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (thisChild >= soapBodyChildren.size()) {</a></pre></td></tr>
+<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// indicates to the caller that there are no more messages to decode</span></pre></td></tr>
+<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// this should be caught and recovered from</span></pre></td></tr>
+<tr> <td class="numLineCover"> 126</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IndexOutOfBoundsException();</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>
+<tr> <td class="numLineCover"> 129</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> XMLObject incomingMessage = soapBodyChildren.get(thisChild);</pre></td></tr>
+<tr> <td class="numLineCover"> 130</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> thisChild++;</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="nbHitsUncovered"><a title="Line 132: Conditional coverage 50% (1/2)."> 17</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 132: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!(incomingMessage <span class="keyword">instanceof</span> SAMLObject)) {</a></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">throw</span> <span class="keyword">new</span> MessageDecodingException(</span></pre></td></tr>
+<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Unexpected SOAP body content. Expected a SAML request but recieved "</span></pre></td></tr>
+<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + incomingMessage.getElementQName());</pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 137</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> SAMLObject samlMessage = (SAMLObject) incomingMessage;</pre></td></tr>
+<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 139</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> log.log(Level.FINE,</pre></td></tr>
+<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Decoded SOAP messaged which included SAML message of type {}"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> samlMessage.getElementQName());</pre></td></tr>
+<tr> <td class="numLineCover"> 142</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> samlMsgCtx.setInboundSAMLMessage(samlMessage);</pre></td></tr>
+<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 144</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> populateMessageContext(samlMsgCtx);</pre></td></tr>
+<tr> <td class="numLineCover"> 145</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 147</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 148</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Checks that all SOAP headers that require understanding are in the understood header</span></pre></td></tr>
+<tr> <td class="numLine"> 149</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * list.</span></pre></td></tr>
+<tr> <td class="numLine"> 150</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 151</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param headers SOAP headers to check</span></pre></td></tr>
+<tr> <td class="numLine"> 152</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 153</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws MessageDecodingException thrown if a SOAP header requires</span></pre></td></tr>
+<tr> <td class="numLine"> 154</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * understanding but is not understood by the decoder</span></pre></td></tr>
+<tr> <td class="numLine"> 155</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 156</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">void</span> checkUnderstoodSOAPHeaders(List<XMLObject> headers)</pre></td></tr>
+<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> MessageDecodingException {</pre></td></tr>
+<tr> <td class="numLineCover"> 158</td> <td class="nbHitsUncovered"><a title="Line 158: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 158: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">if</span> (headers == <span class="keyword">null</span> || headers.isEmpty()) {</a></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">return</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> AttributeExtensibleXMLObject attribExtensObject;</pre></td></tr>
+<tr> <td class="numLineCover"> 163</td> <td class="nbHitsUncovered"><a title="Line 163: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 163: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (XMLObject header : headers) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 164</td> <td class="nbHitsUncovered"><a title="Line 164: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 164: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (header <span class="keyword">instanceof</span> AttributeExtensibleXMLObject) {</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"> attribExtensObject = (AttributeExtensibleXMLObject) header;</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">if</span> (DatatypeHelper.safeEquals(<span class="string">"1"</span>, attribExtensObject.getUnknownAttributes().get(</a></span></pre></td></tr>
+<tr> <td class="numLine"> 167</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> soapMustUnderstand))) {</pre></td></tr>
+<tr> <td class="numLineCover"> 168</td> <td class="nbHitsUncovered"><a title="Line 168: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 168: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!understoodHeaders.contains(header.getElementQName())) {</a></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">throw</span> <span class="keyword">new</span> MessageDecodingException(</span></pre></td></tr>
+<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"SOAP decoder encountered a header, "</span></pre></td></tr>
+<tr> <td class="numLine"> 171</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + header.getElementQName()</pre></td></tr>
+<tr> <td class="numLine"> 172</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">", that requires undestanding, "</span></pre></td></tr>
+<tr> <td class="numLine"> 173</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"however this decoder does not understand that header"</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"> }</pre></td></tr>
+<tr> <td class="numLine"> 176</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 177</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 178</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 179</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 180</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> start(SAMLMessageContext<SAMLObject, SAMLObject, SAMLObject> samlMsgCtx)</pre></td></tr>
+<tr> <td class="numLine"> 181</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> MessageDecodingException {</pre></td></tr>
+<tr> <td class="numLineCover"> 182</td> <td class="nbHitsUncovered"><a title="Line 182: Conditional coverage 50% (1/2)."> 16</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 182: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!(samlMsgCtx.getInboundMessageTransport() <span class="keyword">instanceof</span> HTTPInTransport)) {</a></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">throw</span> <span class="keyword">new</span> MessageDecodingException(</span></pre></td></tr>
+<tr> <td class="numLine"> 184</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Invalid inbound message transport type, this decoder only support HTTPInTransport"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 185</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 186</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> HTTPInTransport inTransport = (HTTPInTransport) samlMsgCtx.getInboundMessageTransport();</pre></td></tr>
+<tr> <td class="numLine"> 187</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 188</td> <td class="nbHitsUncovered"><a title="Line 188: Conditional coverage 50% (1/2)."> 16</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 188: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!inTransport.getHTTPMethod().equalsIgnoreCase(<span class="string">"POST"</span>)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 189</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> MessageDecodingException(</span></pre></td></tr>
+<tr> <td class="numLine"> 190</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"This message deocoder only supports the HTTP POST method"</span>);</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"> </pre></td></tr>
+<tr> <td class="numLineCover"> 193</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> log.fine(<span class="string">"Unmarshalling SOAP message"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 194</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> soapMessage = Envelope.<span class="keyword">class</span>.cast(unmarshallMessage(inTransport.getIncomingStream()));</pre></td></tr>
+<tr> <td class="numLine"> 195</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 196</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> Header messageHeader = soapMessage.getHeader();</pre></td></tr>
+<tr> <td class="numLineCover"> 197</td> <td class="nbHitsUncovered"><a title="Line 197: Conditional coverage 50% (1/2)."> 15</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 197: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (messageHeader != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 198</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> checkUnderstoodSOAPHeaders(soapMessage.getHeader().getUnknownXMLObjects());</span></pre></td></tr>
+<tr> <td class="numLine"> 199</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 200</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> soapBodyChildren = soapMessage.getBody().getUnknownXMLObjects();</pre></td></tr>
+<tr> <td class="numLineCover"> 201</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> thisChild = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 202</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 203</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextEncoder.html b/coverage/com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextEncoder.html
new file mode 100644
index 0000000..c376371
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextEncoder.html
@@ -0,0 +1,268 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextEncoder</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextEncoder.html">HTTPSOAP11MultiContextEncoder</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">14</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:70px"><span class="text">34/48</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">7</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:41px"><span class="text">5/12</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.142857142857143;</span>3.143</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2009 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.saml;</pre></td></tr>
+<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> org.opensaml.Configuration;</pre></td></tr>
+<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.SAMLObject;</pre></td></tr>
+<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.binding.SAMLMessageContext;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.xml.SAMLConstants;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.binding.encoding.BaseSAML2MessageEncoder;</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.message.MessageContext;</pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.message.encoder.MessageEncodingException;</pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.soap.common.SOAPObjectBuilder;</pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.soap.soap11.Body;</pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.soap.soap11.Envelope;</pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.transport.http.HTTPOutTransport;</pre></td></tr>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.transport.http.HTTPTransportUtils;</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.opensaml.xml.XMLObjectBuilderFactory;</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.opensaml.xml.util.XMLHelper;</pre></td></tr>
+<tr> <td class="numLine"> 31</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"> 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.IOException;</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.io.OutputStreamWriter;</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.io.UnsupportedEncodingException;</pre></td></tr>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.io.Writer;</pre></td></tr>
+<tr> <td class="numLine"> 37</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"> 38</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * SAML 2.0 SOAP 1.1 over HTTP MultiContext binding encoder.</span></pre></td></tr>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Based on OpenSaml's HTTPSOAP11Encoder</span></pre></td></tr>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> HTTPSOAP11MultiContextEncoder <span class="keyword">extends</span> BaseSAML2MessageEncoder {</pre></td></tr>
+<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> Envelope envelope;</pre></td></tr>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> Body body;</pre></td></tr>
+<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> HTTPOutTransport outTransport;</pre></td></tr>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/** Class logger. */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 50</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 = Logger.getLogger(HTTPSOAP11MultiContextEncoder.<span class="keyword">class</span>.getName());</pre></td></tr>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </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"> <span class="comment">/** Constructor. */</span></pre></td></tr>
+<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> HTTPSOAP11MultiContextEncoder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 54</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> <span class="keyword">super</span>();</pre></td></tr>
+<tr> <td class="numLineCover"> 55</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> }</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"> <span class="keyword">public</span> String getBindingURI() {</pre></td></tr>
+<tr> <td class="numLineCover"> 58</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> SAMLConstants.SAML2_SOAP11_BINDING_URI;</span></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="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"> <span class="keyword">public</span> <span class="keyword">boolean</span> providesMessageConfidentiality(MessageContext messageContext) {</pre></td></tr>
+<tr> <td class="numLineCover"> 62</td> <td class="nbHitsUncovered"><a title="Line 62: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 62: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (messageContext.getOutboundMessageTransport().isConfidential()) {</a></span></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> <span class="keyword">true</span>;</span></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="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 66</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> providesMessageIntegrity(MessageContext messageContext) {</pre></td></tr>
+<tr> <td class="numLineCover"> 70</td> <td class="nbHitsUncovered"><a title="Line 70: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 70: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (messageContext.getOutboundMessageTransport().isIntegrityProtected()) {</a></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">return</span> <span class="keyword">true</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="numLineCover"> 74</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 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"> </pre></td></tr>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">void</span> doEncode(MessageContext messageContext) <span class="keyword">throws</span> MessageEncodingException {</pre></td></tr>
+<tr> <td class="numLineCover"> 79</td> <td class="nbHitsUncovered"><a title="Line 79: Conditional coverage 50% (1/2)."> 11</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 79: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!(messageContext <span class="keyword">instanceof</span> SAMLMessageContext<?, ?, ?>)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 80</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> MessageEncodingException(</span></pre></td></tr>
+<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Invalid message context type, this encoder only supports SAMLMessageContext"</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"> @SuppressWarnings(<span class="string">"unchecked"</span>)</pre></td></tr>
+<tr> <td class="numLineCover"> 84</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> SAMLMessageContext<SAMLObject, SAMLObject, SAMLObject> samlMsgCtx =</pre></td></tr>
+<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> (SAMLMessageContext<SAMLObject, SAMLObject, SAMLObject>) messageContext;</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="numLineCover"> 87</td> <td class="nbHitsUncovered"><a title="Line 87: Conditional coverage 50% (1/2)."> 11</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 87: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!(messageContext.getOutboundMessageTransport() <span class="keyword">instanceof</span> HTTPOutTransport)) {</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"> <span class="keyword">throw</span> <span class="keyword">new</span> MessageEncodingException(</span></pre></td></tr>
+<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Invalid outbound message transport type, this encoder only supports HTTPOutTransport"</span>);</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"> 91</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> outTransport = (HTTPOutTransport) messageContext.getOutboundMessageTransport();</pre></td></tr>
+<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"><a title="Line 93: Conditional coverage 100% (2/2)."> 11</a></td> <td class="src"><pre class="src"> <a title="Line 93: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (envelope == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 94</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> buildSOAPMessage();</pre></td></tr>
+<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 97</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> SAMLObject samlMessage = samlMsgCtx.getOutboundSAMLMessage();</pre></td></tr>
+<tr> <td class="numLineCover"> 98</td> <td class="nbHitsUncovered"><a title="Line 98: Conditional coverage 50% (1/2)."> 11</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 98: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (samlMessage == <span class="keyword">null</span>) {</a></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 class="keyword">throw</span> <span class="keyword">new</span> MessageEncodingException(<span class="string">"No outbound SAML message contained in message context"</span>);</span></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"> 11</td> <td class="src"><pre class="src"> signMessage(samlMsgCtx);</pre></td></tr>
+<tr> <td class="numLineCover"> 103</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> samlMsgCtx.setOutboundMessage(envelope);</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="numLineCover"> 105</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> log.fine(<span class="string">"Adding SAML message to the SOAP message's body"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 107</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> body.getUnknownXMLObjects().add(samlMessage);</pre></td></tr>
+<tr> <td class="numLineCover"> 108</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> finish() <span class="keyword">throws</span> MessageEncodingException {</pre></td></tr>
+<tr> <td class="numLineCover"> 111</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> Element envelopeElem = marshallMessage(envelope);</pre></td></tr>
+<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 113</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> HTTPTransportUtils.addNoCacheHeaders(outTransport);</pre></td></tr>
+<tr> <td class="numLineCover"> 114</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> HTTPTransportUtils.setUTF8Encoding(outTransport);</pre></td></tr>
+<tr> <td class="numLineCover"> 115</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> HTTPTransportUtils.setContentType(outTransport, <span class="string">"text/xml"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 116</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> outTransport.setHeader(<span class="string">"SOAPAction"</span>, <span class="string">"http://www.oasis-open.org/committees/security"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 117</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> Writer out = <span class="keyword">new</span> OutputStreamWriter(outTransport.getOutgoingStream(), <span class="string">"UTF-8"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> XMLHelper.writeNode(envelopeElem, out);</pre></td></tr>
+<tr> <td class="numLineCover"> 119</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> out.flush();</pre></td></tr>
+<tr> <td class="numLineCover"> 120</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (UnsupportedEncodingException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 121</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> MessageEncodingException(<span class="string">"JVM does not support required UTF-8 encoding"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 122</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"> 123</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> MessageEncodingException(<span class="string">"Unable to write message content to outbound stream"</span>, e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 124</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 125</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> }</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"> * Builds the SOAP message to be encoded.</span></pre></td></tr>
+<tr> <td class="numLine"> 129</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>
+ <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">void</span> buildSOAPMessage() {</pre></td></tr>
+<tr> <td class="numLineCover"> 131</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> log.fine(<span class="string">"Building SOAP message"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 132</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> XMLObjectBuilderFactory builderFactory = Configuration.getBuilderFactory();</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="numLine"> 134</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @SuppressWarnings(<span class="string">"unchecked"</span>)</pre></td></tr>
+<tr> <td class="numLineCover"> 135</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> SOAPObjectBuilder<Envelope> envBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> (SOAPObjectBuilder<Envelope>) builderFactory.getBuilder(Envelope.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 137</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> envelope = envBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
+ <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"> @SuppressWarnings(<span class="string">"unchecked"</span>)</pre></td></tr>
+<tr> <td class="numLineCover"> 140</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> SOAPObjectBuilder<Body> bodyBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> (SOAPObjectBuilder<Body>) builderFactory.getBuilder(Body.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 142</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> body = bodyBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 144</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> envelope.setBody(body);</pre></td></tr>
+<tr> <td class="numLineCover"> 145</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToInTransport.html b/coverage/com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToInTransport.html
new file mode 100644
index 0000000..52daa84
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToInTransport.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToInTransport</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToInTransport.html">HttpExchangeToInTransport</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">17</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:26px"><span class="text">6/23</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.75;</span>1.75</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2008 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.saml;</pre></td></tr>
+<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.enterprise.adaptor.secmgr.http.HttpExchange;</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> org.opensaml.ws.transport.http.HTTPInTransport;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.credential.Credential;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </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.IOException;</pre></td></tr>
+<tr> <td class="numLine"> 23</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"> 24</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"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * A converter that converts an {@link HttpExchange} object, making it look like</span></pre></td></tr>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * an OpenSAML {@link HTTPInTransport} object. This allows response messages to</span></pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * be processed using the OpenSAML library.</span></pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> HttpExchangeToInTransport <span class="keyword">implements</span> HTTPInTransport {</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">private</span> <span class="keyword">final</span> HttpExchange exchange;</pre></td></tr>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> InputStream entityStream;</pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 36</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">public</span> HttpExchangeToInTransport(HttpExchange exchange) <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 37</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.exchange = exchange;</pre></td></tr>
+<tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> entityStream = exchange.getResponseEntityAsStream();</pre></td></tr>
+<tr> <td class="numLineCover"> 39</td> <td class="nbHitsCovered"> 6</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> InputStream getIncomingStream() {</pre></td></tr>
+<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> entityStream;</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="numLine"> 44</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getHeaderValue(String name) {</pre></td></tr>
+<tr> <td class="numLineCover"> 46</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> exchange.getResponseHeaderValue(name);</span></pre></td></tr>
+<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> getStatusCode() {</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">return</span> exchange.getStatusCode();</span></pre></td></tr>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </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"> <span class="keyword">public</span> String getHTTPMethod() {</pre></td></tr>
+<tr> <td class="numLineCover"> 54</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> exchange.getHttpMethod();</pre></td></tr>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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"> <span class="keyword">public</span> String getPeerAddress() {</pre></td></tr>
+<tr> <td class="numLineCover"> 58</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> UnsupportedOperationException();</span></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="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"> <span class="keyword">public</span> String getPeerDomainName() {</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">throw</span> <span class="keyword">new</span> UnsupportedOperationException();</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>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Object getAttribute(String name) {</pre></td></tr>
+<tr> <td class="numLineCover"> 66</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> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Credential getLocalCredential() {</pre></td></tr>
+<tr> <td class="numLineCover"> 70</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="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"> <span class="keyword">public</span> Credential getPeerCredential() {</pre></td></tr>
+<tr> <td class="numLineCover"> 74</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> UnsupportedOperationException();</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> isAuthenticated() {</pre></td></tr>
+<tr> <td class="numLineCover"> 78</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> UnsupportedOperationException();</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> isConfidential() {</pre></td></tr>
+<tr> <td class="numLineCover"> 82</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> UnsupportedOperationException();</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> isIntegrityProtected() {</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">throw</span> <span class="keyword">new</span> UnsupportedOperationException();</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"> </pre></td></tr>
+<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setAuthenticated(<span class="keyword">boolean</span> value) {</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">throw</span> <span class="keyword">new</span> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setConfidential(<span class="keyword">boolean</span> value) {</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> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setIntegrityProtected(<span class="keyword">boolean</span> value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 98</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> UnsupportedOperationException();</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"> 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"> <span class="keyword">public</span> HTTP_VERSION getVersion() {</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">throw</span> <span class="keyword">new</span> UnsupportedOperationException();</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"> <span class="keyword">public</span> String getParameterValue(String name) {</pre></td></tr>
+<tr> <td class="numLineCover"> 106</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> UnsupportedOperationException();</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"> </pre></td></tr>
+<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> List<String> getParameterValues(String name) {</pre></td></tr>
+<tr> <td class="numLineCover"> 110</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> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getCharacterEncoding() {</pre></td></tr>
+<tr> <td class="numLineCover"> 114</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> UnsupportedOperationException();</span></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="numLine"> 116</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToOutTransport.html b/coverage/com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToOutTransport.html
new file mode 100644
index 0000000..7a0ebf0
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToOutTransport.html
@@ -0,0 +1,273 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToOutTransport</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToOutTransport.html">HttpExchangeToOutTransport</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">22</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">11/33</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.7307692307692308;</span>1.731</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2008 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.saml;</pre></td></tr>
+<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.enterprise.adaptor.secmgr.http.HttpExchange;</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> org.opensaml.ws.transport.http.HTTPOutTransport;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.credential.Credential;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </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.ByteArrayOutputStream;</pre></td></tr>
+<tr> <td class="numLine"> 23</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"> 24</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"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * A converter that converts an {@link HttpExchange} object, making it look like</span></pre></td></tr>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * an OpenSAML {@link HTTPOutTransport} object. This allows request messages to</span></pre></td></tr>
+<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * be generated using the OpenSAML library.</span></pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> HttpExchangeToOutTransport <span class="keyword">implements</span> HTTPOutTransport {</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">private</span> <span class="keyword">final</span> HttpExchange exchange;</pre></td></tr>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ByteArrayOutputStream entityStream;</pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> String encoding;</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="numLineCover"> 37</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">public</span> HttpExchangeToOutTransport(HttpExchange exchange) {</pre></td></tr>
+<tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.exchange = exchange;</pre></td></tr>
+<tr> <td class="numLineCover"> 39</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> entityStream = <span class="keyword">new</span> ByteArrayOutputStream();</pre></td></tr>
+<tr> <td class="numLineCover"> 40</td> <td class="nbHitsCovered"> 6</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">public</span> <span class="keyword">void</span> finish() {</pre></td></tr>
+<tr> <td class="numLineCover"> 43</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> exchange.setRequestBody(entityStream.toByteArray());</pre></td></tr>
+<tr> <td class="numLineCover"> 44</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> addParameter(String name, String value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 47</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> exchange.addParameter(name, value);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 48</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></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="numLine"> 50</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setHeader(String name, String value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 51</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> exchange.setRequestHeader(name, value);</pre></td></tr>
+<tr> <td class="numLineCover"> 52</td> <td class="nbHitsCovered"> 24</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">public</span> OutputStream getOutgoingStream() {</pre></td></tr>
+<tr> <td class="numLineCover"> 55</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> entityStream;</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="keyword">public</span> <span class="keyword">void</span> setCharacterEncoding(String encoding) {</pre></td></tr>
+<tr> <td class="numLineCover"> 59</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.encoding = encoding;</pre></td></tr>
+<tr> <td class="numLineCover"> 60</td> <td class="nbHitsCovered"> 6</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">public</span> String getCharacterEncoding() {</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> encoding;</span></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="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> sendRedirect(String location) {</pre></td></tr>
+<tr> <td class="numLineCover"> 67</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> UnsupportedOperationException();</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>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setStatusCode(<span class="keyword">int</span> status) {</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">throw</span> <span class="keyword">new</span> UnsupportedOperationException();</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">public</span> <span class="keyword">void</span> setVersion(HTTP_VERSION version) {</pre></td></tr>
+<tr> <td class="numLineCover"> 75</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> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setAttribute(String name, Object value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 79</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> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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"> <span class="keyword">public</span> Object getAttribute(String name) {</pre></td></tr>
+<tr> <td class="numLineCover"> 83</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> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 84</td> <td class="nbHits"> </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="keyword">public</span> String getParameterValue(String name) {</pre></td></tr>
+<tr> <td class="numLineCover"> 87</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> UnsupportedOperationException();</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> List<String> getParameterValues(String name) {</pre></td></tr>
+<tr> <td class="numLineCover"> 91</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> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getHeaderValue(String name) {</pre></td></tr>
+<tr> <td class="numLineCover"> 95</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> UnsupportedOperationException();</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="numLine"> 97</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Credential getLocalCredential() {</pre></td></tr>
+<tr> <td class="numLineCover"> 99</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> UnsupportedOperationException();</span></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="numLine"> 102</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Credential getPeerCredential() {</pre></td></tr>
+<tr> <td class="numLineCover"> 103</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> UnsupportedOperationException();</span></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"> <span class="keyword">public</span> <span class="keyword">boolean</span> isAuthenticated() {</pre></td></tr>
+<tr> <td class="numLineCover"> 107</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> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> isConfidential() {</pre></td></tr>
+<tr> <td class="numLineCover"> 111</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> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> isIntegrityProtected() {</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> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setAuthenticated(<span class="keyword">boolean</span> value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 119</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> UnsupportedOperationException();</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="numLine"> 121</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setConfidential(<span class="keyword">boolean</span> value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 123</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> UnsupportedOperationException();</span></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"> </pre></td></tr>
+<tr> <td class="numLine"> 126</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setIntegrityProtected(<span class="keyword">boolean</span> value) {</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">throw</span> <span class="keyword">new</span> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getHTTPMethod() {</pre></td></tr>
+<tr> <td class="numLineCover"> 131</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> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 132</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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="numLine"> 134</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> getStatusCode() {</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">throw</span> <span class="keyword">new</span> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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"> <span class="keyword">public</span> HTTP_VERSION getVersion() {</pre></td></tr>
+<tr> <td class="numLineCover"> 139</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> UnsupportedOperationException();</span></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>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.html b/coverage/com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.html
new file mode 100644
index 0000000..afad512
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.html
@@ -0,0 +1,1946 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.html">OpenSamlUtil</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">75</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:71px"><span class="text">185/260</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">14</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:53px"><span class="text">16/30</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.4912280701754386;</span>1.491</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2008 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.saml;</pre></td></tr>
+<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> <span class="keyword">static</span> org.opensaml.common.xml.SAMLConstants.SAML20P_NS;</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.google.common.collect.Lists;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.joda.time.DateTime;</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.Configuration;</pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.DefaultBootstrap;</pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.IdentifierGenerator;</pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.SAMLObject;</pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.SAMLObjectBuilder;</pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.SAMLVersion;</pre></td></tr>
+<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.binding.BasicEndpointSelector;</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.opensaml.common.binding.BasicSAMLMessageContext;</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.opensaml.common.binding.SAMLMessageContext;</pre></td></tr>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.binding.artifact.BasicSAMLArtifactMap;</pre></td></tr>
+<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.binding.artifact.SAMLArtifactMap;</pre></td></tr>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.binding.artifact.SAMLArtifactMap.SAMLArtifactMapEntry;</pre></td></tr>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.impl.SecureRandomIdentifierGenerator;</pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Action;</pre></td></tr>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Artifact;</pre></td></tr>
+<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.ArtifactResolve;</pre></td></tr>
+<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.ArtifactResponse;</pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Assertion;</pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Attribute;</pre></td></tr>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.AttributeStatement;</pre></td></tr>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Audience;</pre></td></tr>
+<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.AudienceRestriction;</pre></td></tr>
+<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.AuthnContext;</pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.AuthnContextClassRef;</pre></td></tr>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.AuthnRequest;</pre></td></tr>
+<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.AuthnStatement;</pre></td></tr>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.AuthzDecisionQuery;</pre></td></tr>
+<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.AuthzDecisionStatement;</pre></td></tr>
+<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Conditions;</pre></td></tr>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.DecisionTypeEnumeration;</pre></td></tr>
+<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Issuer;</pre></td></tr>
+<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.NameID;</pre></td></tr>
+<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.RequestAbstractType;</pre></td></tr>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Response;</pre></td></tr>
+<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Statement;</pre></td></tr>
+<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Status;</pre></td></tr>
+<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.StatusCode;</pre></td></tr>
+<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.StatusMessage;</pre></td></tr>
+<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.StatusResponseType;</pre></td></tr>
+<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Subject;</pre></td></tr>
+<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.SubjectConfirmation;</pre></td></tr>
+<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.SubjectConfirmationData;</pre></td></tr>
+<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.metadata.EntityDescriptor;</pre></td></tr>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.metadata.KeyDescriptor;</pre></td></tr>
+<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.metadata.AssertionConsumerService;</pre></td></tr>
+<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.metadata.RoleDescriptor;</pre></td></tr>
+<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.metadata.SingleSignOnService;</pre></td></tr>
+<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider;</pre></td></tr>
+<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.metadata.provider.MetadataProviderException;</pre></td></tr>
+<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.metadata.provider.ObservableMetadataProvider;</pre></td></tr>
+<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.security.MetadataCredentialResolver;</pre></td></tr>
+<tr> <td class="numLine"> 73</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.util.storage.MapBasedStorageService;</pre></td></tr>
+<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.message.MessageContext;</pre></td></tr>
+<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.message.decoder.MessageDecoder;</pre></td></tr>
+<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.message.decoder.MessageDecodingException;</pre></td></tr>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.message.encoder.MessageEncoder;</pre></td></tr>
+<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.message.encoder.MessageEncodingException;</pre></td></tr>
+<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.security.SecurityPolicy;</pre></td></tr>
+<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.security.SecurityPolicyResolver;</pre></td></tr>
+<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.security.SecurityPolicyRule;</pre></td></tr>
+<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.security.provider.BasicSecurityPolicy;</pre></td></tr>
+<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.ws.security.provider.StaticSecurityPolicyResolver;</pre></td></tr>
+<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.ConfigurationException;</pre></td></tr>
+<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.XMLObject;</pre></td></tr>
+<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.XMLObjectBuilderFactory;</pre></td></tr>
+<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.io.MarshallingException;</pre></td></tr>
+<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.io.UnmarshallingException;</pre></td></tr>
+<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.parse.BasicParserPool;</pre></td></tr>
+<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.CriteriaSet;</pre></td></tr>
+<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.SecurityException;</pre></td></tr>
+<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.SecurityHelper;</pre></td></tr>
+<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.credential.Credential;</pre></td></tr>
+<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.credential.CredentialResolver;</pre></td></tr>
+<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.credential.UsageType;</pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.keyinfo.BasicProviderKeyInfoCredentialResolver;</pre></td></tr>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.keyinfo.KeyInfoCredentialResolver;</pre></td></tr>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.keyinfo.KeyInfoCriteria;</pre></td></tr>
+<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.keyinfo.KeyInfoProvider;</pre></td></tr>
+<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.keyinfo.provider.DSAKeyValueProvider;</pre></td></tr>
+<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.keyinfo.provider.InlineX509DataProvider;</pre></td></tr>
+<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.keyinfo.provider.RSAKeyValueProvider;</pre></td></tr>
+<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.security.trust.TrustEngine;</pre></td></tr>
+<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.signature.KeyInfo;</pre></td></tr>
+<tr> <td class="numLine"> 105</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"> 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="keyword">import</span> java.io.File;</pre></td></tr>
+<tr> <td class="numLine"> 108</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"> 109</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.security.KeyException;</pre></td></tr>
+<tr> <td class="numLine"> 110</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"> 111</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.security.PrivateKey;</pre></td></tr>
+<tr> <td class="numLine"> 112</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"> 113</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"> 114</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"> 115</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.concurrent.Immutable;</pre></td></tr>
+<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.xml.namespace.QName;</pre></td></tr>
+<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * A collection of utilities to support OpenSAML programming. The majority of the</span></pre></td></tr>
+<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * definitions here are static factory methods for SAML objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <p></span></pre></td></tr>
+<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <strong>Notes on security policies and credential resolution:</strong></span></pre></td></tr>
+<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <p></span></pre></td></tr>
+<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * OpenSAML has a very complicated mechanism for dealing with credentials and trust, of</span></pre></td></tr>
+<tr> <td class="numLine"> 126</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * which we use only a small part. Here are the basic components:</span></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"> * <dl></span></pre></td></tr>
+<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <dt>{@link Credential}</span></pre></td></tr>
+<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <dd>Some information that can be used for signing or encryption.</span></pre></td></tr>
+<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 132</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <dt>{@link CredentialResolver}</span></pre></td></tr>
+<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <dd>Selects one or more credentials based on a set of criteria. We currently use only</span></pre></td></tr>
+<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * {@link MetadataCredentialResolver}, which gets credentials from metadata using criteria</span></pre></td></tr>
+<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * like entity ID and role.</span></pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <dt>{@link KeyInfoCredentialResolver}</span></pre></td></tr>
+<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <dd>Extracts one or more credentials from a {@link KeyInfo} element; it's allowed to</span></pre></td></tr>
+<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * choose between different credentials based on internal criteria. We currently use a</span></pre></td></tr>
+<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * KeyInfoCredentialResolver that selects only X.509 certificate credentials.</span></pre></td></tr>
+<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 142</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <dt>{@link TrustEngine}</span></pre></td></tr>
+<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <dd>Evaluates the trustworthiness and validity of a given object against some given</span></pre></td></tr>
+<tr> <td class="numLine"> 144</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * criteria. It is used as an element of some policy rules.</span></pre></td></tr>
+<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <dt>{@link SecurityPolicy}</span></pre></td></tr>
+<tr> <td class="numLine"> 147</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <dd>A collection of policy rules, evaluated against a message context, that determines</span></pre></td></tr>
+<tr> <td class="numLine"> 148</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * if a message is well-formed, valid, and otherwise okay to process.</span></pre></td></tr>
+<tr> <td class="numLine"> 149</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 150</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <dt>{@link SecurityPolicyRule}</span></pre></td></tr>
+<tr> <td class="numLine"> 151</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <dd>A component of a security policy, also evaluated against a message context.</span></pre></td></tr>
+<tr> <td class="numLine"> 152</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 153</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <dt>{@link SecurityPolicyResolver}</span></pre></td></tr>
+<tr> <td class="numLine"> 154</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <dd>Uses a given set of criteria to select a security policy. We currently use only a</span></pre></td></tr>
+<tr> <td class="numLine"> 155</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * static policy resolver, which always returns the same policy.</span></pre></td></tr>
+<tr> <td class="numLine"> 156</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * </dl></span></pre></td></tr>
+<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 158</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <p></span></pre></td></tr>
+<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * The programmer simply attaches a security-policy resolver to the SAML message context</span></pre></td></tr>
+<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * and OpenSAML will automatically enforce the security policy as appropriate.</span></pre></td></tr>
+<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Immutable</pre></td></tr>
+<tr> <td class="numLine"> 163</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> OpenSamlUtil {</pre></td></tr>
+<tr> <td class="numLineCover"> 164</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 LOGGER = Logger.getLogger(OpenSamlUtil.<span class="keyword">class</span>.getName());</pre></td></tr>
+<tr> <td class="numLine"> 165</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 167</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * The human-readable name of the (GSA) service provider.</span></pre></td></tr>
+<tr> <td class="numLine"> 168</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 169</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 GOOGLE_PROVIDER_NAME = <span class="string">"Google Search Appliance"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 171</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 172</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * The human-readable name of the (Security Manager) service provider.</span></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"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String SM_PROVIDER_NAME = <span class="string">"Google Security Manager"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<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"> 177</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * The SAML "bearer" method, normally used in SubjectConfirmation.</span></pre></td></tr>
+<tr> <td class="numLine"> 178</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>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String BEARER_METHOD = <span class="string">"urn:oasis:names:tc:SAML:2.0:cm:bearer"</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"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String SAML_EXTENSIONS_TAG = <span class="string">"Extensions"</span>;</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>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String GSA_SESSION_ID_TAG = <span class="string">"GsaSessionId"</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"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String GSA_FLAG_FAST_AUTHZ_TAG = <span class="string">"EnableFastAuthz"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 186</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 GSA_FAST_AUTHZ_FAST = <span class="string">"FAST"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 187</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 GSA_FAST_AUTHZ_ALL = <span class="string">"ALL"</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="numLine"> 189</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 GOOGLE_NS_URI = <span class="string">"http://www.google.com/"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 190</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 GOOGLE_NS_PREFIX = <span class="string">"google:"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 191</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String GOOGLE_NS_PREFIX_NOCOLON = <span class="string">"google"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 192</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/*public static final Namespace GOOGLE_NS =</span></pre></td></tr>
+<tr> <td class="numLine"> 193</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> Namespace.getNamespace(GOOGLE_NS_PREFIX_NOCOLON, GOOGLE_NS_URI);*/</span></pre></td></tr>
+<tr> <td class="numLine"> 194</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 195</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">static</span> {</pre></td></tr>
+<tr> <td class="numLine"> 196</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 197</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> DefaultBootstrap.bootstrap();</pre></td></tr>
+<tr> <td class="numLineCover"> 198</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (ConfigurationException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 199</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(e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 200</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 201</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 202</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// This is required in order to patch around missing code in OpenSAML.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 203</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Configuration.registerObjectProvider(</pre></td></tr>
+<tr> <td class="numLine"> 204</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> AttributeValue.DEFAULT_ELEMENT_NAME,</pre></td></tr>
+<tr> <td class="numLine"> 205</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> AttributeValueBuilder(),</pre></td></tr>
+<tr> <td class="numLine"> 206</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> AttributeValueMarshaller(),</pre></td></tr>
+<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> AttributeValueUnmarshaller());</pre></td></tr>
+<tr> <td class="numLine"> 208</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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="numLineCover"> 210</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> XMLObjectBuilderFactory objectBuilderFactory =</pre></td></tr>
+<tr> <td class="numLine"> 211</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Configuration.getBuilderFactory();</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"> <span class="comment">// TODO(cph): @SuppressWarnings is needed because objectBuilderFactory.getBuilder() returns a</span></pre></td></tr>
+<tr> <td class="numLine"> 214</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// supertype of the actual type.</span></pre></td></tr>
+<tr> <td class="numLine"> 215</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @SuppressWarnings(<span class="string">"unchecked"</span>)</pre></td></tr>
+<tr> <td class="numLine"> 216</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <T <span class="keyword">extends</span> SAMLObject> SAMLObjectBuilder<T> makeSamlObjectBuilder(QName name) {</pre></td></tr>
+<tr> <td class="numLineCover"> 217</td> <td class="nbHitsCovered"> 28</td> <td class="src"><pre class="src"> <span class="keyword">return</span> (SAMLObjectBuilder<T>) objectBuilderFactory.getBuilder(name);</pre></td></tr>
+<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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"> 220</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> SAMLObjectBuilder<Action> actionBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 221</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(Action.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 222</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> SAMLObjectBuilder<Artifact> artifactBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 223</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(Artifact.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 224</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> SAMLObjectBuilder<ArtifactResolve> artifactResolveBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 225</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(ArtifactResolve.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 226</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> SAMLObjectBuilder<ArtifactResponse> artifactResponseBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(ArtifactResponse.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 228</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> SAMLObjectBuilder<Assertion> assertionBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 229</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(Assertion.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 230</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> SAMLObjectBuilder<AssertionConsumerService> assertionConsumerServiceBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 231</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 232</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> SAMLObjectBuilder<Attribute> attributeBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 233</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(Attribute.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 234</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> SAMLObjectBuilder<AttributeStatement> attributeStatementBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 235</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(AttributeStatement.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 236</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> SAMLObjectBuilder<AttributeValue> attributeValueBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 237</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(AttributeValue.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 238</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> SAMLObjectBuilder<Audience> audienceBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 239</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(Audience.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 240</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> SAMLObjectBuilder<AudienceRestriction> audienceRestrictionBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 241</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(AudienceRestriction.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 242</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> SAMLObjectBuilder<AuthnContext> authnContextBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(AuthnContext.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 244</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> SAMLObjectBuilder<AuthnContextClassRef> authnContextClassRefBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 245</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(AuthnContextClassRef.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 246</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> SAMLObjectBuilder<AuthnRequest> authnRequestBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 247</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(AuthnRequest.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 248</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> SAMLObjectBuilder<AuthnStatement> authnStatementBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 249</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(AuthnStatement.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 250</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> SAMLObjectBuilder<AuthzDecisionQuery> authzDecisionQueryBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 251</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(AuthzDecisionQuery.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 252</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> SAMLObjectBuilder<AuthzDecisionStatement> authzDecisionStatementBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 253</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(AuthzDecisionStatement.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 254</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> SAMLObjectBuilder<Conditions> conditionsBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 255</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(Conditions.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 256</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> SAMLObjectBuilder<Issuer> issuerBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(Issuer.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 258</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> SAMLObjectBuilder<NameID> nameIDBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(NameID.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 260</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> SAMLObjectBuilder<Response> responseBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 261</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(Response.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 262</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> SAMLObjectBuilder<Status> statusBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(Status.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 264</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> SAMLObjectBuilder<StatusCode> statusCodeBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(StatusCode.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 266</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> SAMLObjectBuilder<StatusMessage> statusMessageBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 267</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(StatusMessage.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 268</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> SAMLObjectBuilder<Subject> subjectBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 269</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(Subject.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 270</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> SAMLObjectBuilder<SubjectConfirmation> subjectConfirmationBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(SubjectConfirmation.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLineCover"> 272</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> SAMLObjectBuilder<SubjectConfirmationData> subjectConfirmationDataBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 273</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(SubjectConfirmationData.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLine"> 274</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Metadata builders</span></pre></td></tr>
+<tr> <td class="numLine"> 276</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 277</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> SAMLObjectBuilder<SingleSignOnService> singleSignOnServiceBuilder =</pre></td></tr>
+<tr> <td class="numLine"> 278</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> makeSamlObjectBuilder(SingleSignOnService.DEFAULT_ELEMENT_NAME);</pre></td></tr>
+<tr> <td class="numLine"> 279</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 280</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Identifier generator</span></pre></td></tr>
+<tr> <td class="numLine"> 281</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 282</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> IdentifierGenerator idGenerator;</pre></td></tr>
+<tr> <td class="numLine"> 283</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">static</span> {</pre></td></tr>
+<tr> <td class="numLine"> 284</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 285</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> idGenerator = <span class="keyword">new</span> SecureRandomIdentifierGenerator();</pre></td></tr>
+<tr> <td class="numLineCover"> 286</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (NoSuchAlgorithmException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 287</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(e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 288</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 289</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 290</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 291</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Non-instantiable class.</span></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">private</span> OpenSamlUtil() {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 293</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 294</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 295</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> initializeRequest(RequestAbstractType request, String issuer,</pre></td></tr>
+<tr> <td class="numLine"> 296</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> DateTime issueInstant) {</pre></td></tr>
+<tr> <td class="numLineCover"> 297</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> request.setID(generateIdentifier());</pre></td></tr>
+<tr> <td class="numLineCover"> 298</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> request.setVersion(SAMLVersion.VERSION_20);</pre></td></tr>
+<tr> <td class="numLineCover"> 299</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> request.setIssuer(makeIssuer(issuer));</pre></td></tr>
+<tr> <td class="numLineCover"> 300</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> request.setIssueInstant(issueInstant);</pre></td></tr>
+<tr> <td class="numLineCover"> 301</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 302</td> <td class="nbHits"> </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"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> initializeResponse(StatusResponseType response, String issuer,</pre></td></tr>
+<tr> <td class="numLine"> 304</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> DateTime issueInstant, Status status, String inResponseTo) {</pre></td></tr>
+<tr> <td class="numLineCover"> 305</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> response.setID(generateIdentifier());</pre></td></tr>
+<tr> <td class="numLineCover"> 306</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> response.setVersion(SAMLVersion.VERSION_20);</pre></td></tr>
+<tr> <td class="numLineCover"> 307</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> response.setIssuer(makeIssuer(issuer));</pre></td></tr>
+<tr> <td class="numLineCover"> 308</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> response.setIssueInstant(issueInstant);</pre></td></tr>
+<tr> <td class="numLineCover"> 309</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> response.setStatus(status);</pre></td></tr>
+<tr> <td class="numLineCover"> 310</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> response.setInResponseTo(inResponseTo);</pre></td></tr>
+<tr> <td class="numLineCover"> 311</td> <td class="nbHitsCovered"> 12</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"> </pre></td></tr>
+<tr> <td class="numLine"> 313</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 314</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link Action} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 315</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 316</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param name A URI identifying the represented action.</span></pre></td></tr>
+<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param namespace A URI identifying the class of names being specified.</span></pre></td></tr>
+<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>Action</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 319</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 320</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Action makeAction(String name, String namespace) {</pre></td></tr>
+<tr> <td class="numLineCover"> 321</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> Action action = actionBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 322</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> action.setAction(name);</pre></td></tr>
+<tr> <td class="numLineCover"> 323</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> action.setNamespace(namespace);</pre></td></tr>
+<tr> <td class="numLineCover"> 324</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> <span class="keyword">return</span> action;</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"> </pre></td></tr>
+<tr> <td class="numLine"> 327</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 328</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link Artifact} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 329</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 330</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param value The artifact string.</span></pre></td></tr>
+<tr> <td class="numLine"> 331</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>Artifact</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 332</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 333</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> Artifact makeArtifact(String value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 334</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> Artifact element = artifactBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 335</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> element.setArtifact(value);</pre></td></tr>
+<tr> <td class="numLineCover"> 336</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> element;</pre></td></tr>
+<tr> <td class="numLine"> 337</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 338</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 339</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 340</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link ArtifactResolve} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 341</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 342</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issuer The entity issuing this request.</span></pre></td></tr>
+<tr> <td class="numLine"> 343</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issueInstant The time of issue for this statement.</span></pre></td></tr>
+<tr> <td class="numLine"> 344</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param value The artifact string to be resolved.</span></pre></td></tr>
+<tr> <td class="numLine"> 345</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>ArtifactResolve</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 346</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 347</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> ArtifactResolve makeArtifactResolve(String issuer, DateTime issueInstant,</pre></td></tr>
+<tr> <td class="numLine"> 348</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 349</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> ArtifactResolve request = artifactResolveBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 350</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> initializeRequest(request, issuer, issueInstant);</pre></td></tr>
+<tr> <td class="numLineCover"> 351</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> request.setArtifact(makeArtifact(value));</pre></td></tr>
+<tr> <td class="numLineCover"> 352</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> request;</pre></td></tr>
+<tr> <td class="numLine"> 353</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 354</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 355</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 356</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link ArtifactResponse} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 357</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 358</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issuer The entity issuing this response.</span></pre></td></tr>
+<tr> <td class="numLine"> 359</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issueInstant The time of issue for this statement.</span></pre></td></tr>
+<tr> <td class="numLine"> 360</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param status The <code>Status</code> object indicating the success of the resolution.</span></pre></td></tr>
+<tr> <td class="numLine"> 361</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param inResponseTo The message ID of the request this is a response to.</span></pre></td></tr>
+<tr> <td class="numLine"> 362</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param message The embedded message.</span></pre></td></tr>
+<tr> <td class="numLine"> 363</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>ArtifactResponse</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 364</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 365</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> ArtifactResponse makeArtifactResponse(String issuer, DateTime issueInstant,</pre></td></tr>
+<tr> <td class="numLine"> 366</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Status status, String inResponseTo, SAMLObject message) {</pre></td></tr>
+<tr> <td class="numLineCover"> 367</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ArtifactResponse response = artifactResponseBuilder.buildObject();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 368</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> initializeResponse(response, issuer, issueInstant, status, inResponseTo);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 369</td> <td class="nbHitsUncovered"><a title="Line 369: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 369: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (message != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 370</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> response.setMessage(message);</span></pre></td></tr>
+<tr> <td class="numLine"> 371</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 372</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> response;</span></pre></td></tr>
+<tr> <td class="numLine"> 373</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 374</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 375</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 376</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link Assertion} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 377</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 378</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issuer The entity issuing this assertion.</span></pre></td></tr>
+<tr> <td class="numLine"> 379</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issueInstant The time of issue for this statement.</span></pre></td></tr>
+<tr> <td class="numLine"> 380</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param subject The subject of the assertion.</span></pre></td></tr>
+<tr> <td class="numLine"> 381</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param conditions The conditions under which this assertion is valid.</span></pre></td></tr>
+<tr> <td class="numLine"> 382</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param statements Statements being made by this assertion.</span></pre></td></tr>
+<tr> <td class="numLine"> 383</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>Assertion</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 384</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 385</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Assertion makeAssertion(String issuer, DateTime issueInstant, Subject subject,</pre></td></tr>
+<tr> <td class="numLine"> 386</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Conditions conditions, Statement... statements) {</pre></td></tr>
+<tr> <td class="numLineCover"> 387</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> Assertion assertion = assertionBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 388</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> assertion.setID(generateIdentifier());</pre></td></tr>
+<tr> <td class="numLineCover"> 389</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> assertion.setVersion(SAMLVersion.VERSION_20);</pre></td></tr>
+<tr> <td class="numLineCover"> 390</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> assertion.setIssuer(makeIssuer(issuer));</pre></td></tr>
+<tr> <td class="numLineCover"> 391</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> assertion.setIssueInstant(issueInstant);</pre></td></tr>
+<tr> <td class="numLineCover"> 392</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> assertion.setSubject(subject);</pre></td></tr>
+<tr> <td class="numLineCover"> 393</td> <td class="nbHitsCovered"><a title="Line 393: Conditional coverage 100% (2/2)."> 12</a></td> <td class="src"><pre class="src"> <a title="Line 393: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (conditions != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 394</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> assertion.setConditions(conditions);</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="numLineCover"> 396</td> <td class="nbHitsCovered"><a title="Line 396: Conditional coverage 100% (2/2)."> 25</a></td> <td class="src"><pre class="src"> <a title="Line 396: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Statement statement : statements) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 397</td> <td class="nbHitsCovered"><a title="Line 397: Conditional coverage 100% (2/2)."> 13</a></td> <td class="src"><pre class="src"> <a title="Line 397: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (statement <span class="keyword">instanceof</span> AuthnStatement) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 398</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> assertion.getAuthnStatements().add((AuthnStatement) statement);</pre></td></tr>
+<tr> <td class="numLineCover"> 399</td> <td class="nbHitsCovered"><a title="Line 399: Conditional coverage 100% (2/2)."> 12</a></td> <td class="src"><pre class="src"> <a title="Line 399: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (statement <span class="keyword">instanceof</span> AuthzDecisionStatement) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 400</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> assertion.getAuthzDecisionStatements().add((AuthzDecisionStatement) statement);</pre></td></tr>
+<tr> <td class="numLineCover"> 401</td> <td class="nbHitsUncovered"><a title="Line 401: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 401: Conditional coverage 50% (1/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (statement <span class="keyword">instanceof</span> AttributeStatement) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 402</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> assertion.getAttributeStatements().add((AttributeStatement) statement);</pre></td></tr>
+<tr> <td class="numLine"> 403</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</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">"Unknown statement type: "</span> + statement);</span></pre></td></tr>
+<tr> <td class="numLine"> 405</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 406</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 407</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">return</span> assertion;</pre></td></tr>
+<tr> <td class="numLine"> 408</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 409</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 410</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 411</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link AssertionConsumerService} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 412</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 413</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param location A URL for this service.</span></pre></td></tr>
+<tr> <td class="numLine"> 414</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param binding A SAML binding used to communicate with the service.</span></pre></td></tr>
+<tr> <td class="numLine"> 415</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new {@code AssertionConsumerService} object.</span></pre></td></tr>
+<tr> <td class="numLine"> 416</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 417</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> AssertionConsumerService makeAssertionConsumerService(String location,</pre></td></tr>
+<tr> <td class="numLine"> 418</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String binding) {</pre></td></tr>
+<tr> <td class="numLineCover"> 419</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> AssertionConsumerService endpoint = assertionConsumerServiceBuilder.buildObject();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 420</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> endpoint.setLocation(location);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 421</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> endpoint.setBinding(binding);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 422</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> endpoint.setIndex(0);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 423</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> endpoint.setIsDefault(<span class="keyword">true</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 424</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> endpoint;</span></pre></td></tr>
+<tr> <td class="numLine"> 425</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 426</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 427</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 428</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link Attribute} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 429</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 430</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param name The attribute name.</span></pre></td></tr>
+<tr> <td class="numLine"> 431</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>Attribute</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 432</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 433</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Attribute makeAttribute(String name) {</pre></td></tr>
+<tr> <td class="numLineCover"> 434</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Attribute attribute = attributeBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 435</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> attribute.setName(name);</pre></td></tr>
+<tr> <td class="numLineCover"> 436</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> attribute;</pre></td></tr>
+<tr> <td class="numLine"> 437</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 438</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 439</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 440</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link AttributeStatement} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 441</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 442</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param attributes The attributes to include in the statement.</span></pre></td></tr>
+<tr> <td class="numLine"> 443</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>AttributeStatement</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 444</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 445</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> AttributeStatement makeAttributeStatement(Attribute... attributes) {</pre></td></tr>
+<tr> <td class="numLineCover"> 446</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> AttributeStatement statement = attributeStatementBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 447</td> <td class="nbHitsCovered"><a title="Line 447: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 447: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Attribute attribute : attributes) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 448</td> <td class="nbHitsUncovered"><a title="Line 448: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 448: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (attribute != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 449</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statement.getAttributes().add(attribute);</pre></td></tr>
+<tr> <td class="numLine"> 450</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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="numLineCover"> 452</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> statement;</pre></td></tr>
+<tr> <td class="numLine"> 453</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 454</td> <td class="nbHits"> </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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 456</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link AttributeValue} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 457</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 458</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>AttributeValue</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 459</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 460</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> AttributeValue makeAttributeValue(String value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 461</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> AttributeValue attrValue = attributeValueBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 462</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> attrValue.setValue(value);</pre></td></tr>
+<tr> <td class="numLineCover"> 463</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> attrValue;</pre></td></tr>
+<tr> <td class="numLine"> 464</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 465</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 466</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 467</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link Audience} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 468</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 469</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param uri The audience URI.</span></pre></td></tr>
+<tr> <td class="numLine"> 470</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>Audience</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 471</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 472</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> Audience makeAudience(String uri) {</pre></td></tr>
+<tr> <td class="numLineCover"> 473</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Audience audience = audienceBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 474</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> audience.setAudienceURI(uri);</pre></td></tr>
+<tr> <td class="numLineCover"> 475</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> audience;</pre></td></tr>
+<tr> <td class="numLine"> 476</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 477</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<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"> 479</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link AudienceRestriction} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 480</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>
+ <td class="src"><pre class="src"> <span class="comment"> * @param uris The audience URIs.</span></pre></td></tr>
+<tr> <td class="numLine"> 482</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>AudienceRestriction</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 483</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 484</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> AudienceRestriction makeAudienceRestriction(String... uris) {</pre></td></tr>
+<tr> <td class="numLineCover"> 485</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> AudienceRestriction restriction = audienceRestrictionBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 486</td> <td class="nbHitsCovered"><a title="Line 486: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 486: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String uri : uris) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 487</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> restriction.getAudiences().add(makeAudience(uri));</pre></td></tr>
+<tr> <td class="numLine"> 488</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 489</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> restriction;</pre></td></tr>
+<tr> <td class="numLine"> 490</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 491</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 492</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 493</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link AuthnContext} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 494</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 495</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param classRef An <code>AuthnContextClassRef</code> identifying an authentication context</span></pre></td></tr>
+<tr> <td class="numLine"> 496</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * class.</span></pre></td></tr>
+<tr> <td class="numLine"> 497</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>AuthnContext</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 498</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 499</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> AuthnContext makeAuthnContext(AuthnContextClassRef classRef) {</pre></td></tr>
+<tr> <td class="numLineCover"> 500</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> AuthnContext context = authnContextBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 501</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> context.setAuthnContextClassRef(classRef);</pre></td></tr>
+<tr> <td class="numLineCover"> 502</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> context;</pre></td></tr>
+<tr> <td class="numLine"> 503</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 504</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 505</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 506</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link AuthnContext} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 507</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 508</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * A convenience method that wraps the given URI in an {@link AuthnContextClassRef} object.</span></pre></td></tr>
+<tr> <td class="numLine"> 509</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 510</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param uri A URI identifying an authentication context class.</span></pre></td></tr>
+<tr> <td class="numLine"> 511</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>AuthnContext</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 512</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 513</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> AuthnContext makeAuthnContext(String uri) {</pre></td></tr>
+<tr> <td class="numLineCover"> 514</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> makeAuthnContext(makeAuthnContextClassRef(uri));</pre></td></tr>
+<tr> <td class="numLine"> 515</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 518</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link AuthnContextClassRef} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 519</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 520</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param uri A URI identifying an authentication context class.</span></pre></td></tr>
+<tr> <td class="numLine"> 521</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>AuthnContextClassRef</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 522</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 523</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> AuthnContextClassRef makeAuthnContextClassRef(String uri) {</pre></td></tr>
+<tr> <td class="numLineCover"> 524</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> AuthnContextClassRef classRef = authnContextClassRefBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 525</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> classRef.setAuthnContextClassRef(uri);</pre></td></tr>
+<tr> <td class="numLineCover"> 526</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> classRef;</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="numLine"> 529</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 530</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link AuthnRequest} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 531</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 532</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issuer The entity issuing this request.</span></pre></td></tr>
+<tr> <td class="numLine"> 533</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issueInstant The time of issue for this statement.</span></pre></td></tr>
+<tr> <td class="numLine"> 534</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>AuthnRequest</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 535</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 536</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> AuthnRequest makeAuthnRequest(String issuer, DateTime issueInstant) {</pre></td></tr>
+<tr> <td class="numLineCover"> 537</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> AuthnRequest request = authnRequestBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 538</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> initializeRequest(request, issuer, issueInstant);</pre></td></tr>
+<tr> <td class="numLineCover"> 539</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> <span class="keyword">return</span> request;</pre></td></tr>
+<tr> <td class="numLine"> 540</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 541</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 542</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>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link AuthnStatement} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 544</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 545</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issueInstant The time of issue for this statement.</span></pre></td></tr>
+<tr> <td class="numLine"> 546</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param uri A URI identifying an authentication context class.</span></pre></td></tr>
+<tr> <td class="numLine"> 547</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>AuthnStatement</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 548</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 549</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> AuthnStatement makeAuthnStatement(DateTime issueInstant, String uri) {</pre></td></tr>
+<tr> <td class="numLineCover"> 550</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> AuthnStatement statement = authnStatementBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 551</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statement.setAuthnInstant(issueInstant);</pre></td></tr>
+<tr> <td class="numLineCover"> 552</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> statement.setAuthnContext(makeAuthnContext(uri));</pre></td></tr>
+<tr> <td class="numLineCover"> 553</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> statement;</pre></td></tr>
+<tr> <td class="numLine"> 554</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 555</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 556</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 557</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link AuthzDecisionQuery} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 558</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 559</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issuer The entity issuing this query.</span></pre></td></tr>
+<tr> <td class="numLine"> 560</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issueInstant The time of issue for this query.</span></pre></td></tr>
+<tr> <td class="numLine"> 561</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param subject The subject requesting access to a resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 562</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param resource The resource for which access is being requested.</span></pre></td></tr>
+<tr> <td class="numLine"> 563</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param action The action on the resource for which access is being requested.</span></pre></td></tr>
+<tr> <td class="numLine"> 564</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>AuthzDecisionQuery</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 565</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 566</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> AuthzDecisionQuery makeAuthzDecisionQuery(String issuer, DateTime issueInstant,</pre></td></tr>
+<tr> <td class="numLine"> 567</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Subject subject, String resource, Action action) {</pre></td></tr>
+<tr> <td class="numLineCover"> 568</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> AuthzDecisionQuery query = authzDecisionQueryBuilder.buildObject();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 569</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> initializeRequest(query, issuer, issueInstant);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 570</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> query.setSubject(subject);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 571</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> query.setResource(resource);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 572</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> query.getActions().add(action);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 573</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> query;</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="numLine"> 575</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 576</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 577</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link AuthzDecisionStatement} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 578</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 579</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param resource The resource referred to by this access decision.</span></pre></td></tr>
+<tr> <td class="numLine"> 580</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param decision The access decision made by the authorization service.</span></pre></td></tr>
+<tr> <td class="numLine"> 581</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param actions The actions authorized to perform on the stated resource.</span></pre></td></tr>
+<tr> <td class="numLine"> 582</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>AuthzDecisionStatement</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 583</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 584</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> AuthzDecisionStatement makeAuthzDecisionStatement(String resource,</pre></td></tr>
+<tr> <td class="numLine"> 585</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> DecisionTypeEnumeration decision, Action... actions) {</pre></td></tr>
+<tr> <td class="numLineCover"> 586</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> AuthzDecisionStatement statement = authzDecisionStatementBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 587</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> statement.setResource(resource);</pre></td></tr>
+<tr> <td class="numLineCover"> 588</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> statement.setDecision(decision);</pre></td></tr>
+<tr> <td class="numLineCover"> 589</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> statement.getActions().addAll(Arrays.asList(actions));</pre></td></tr>
+<tr> <td class="numLineCover"> 590</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> <span class="keyword">return</span> statement;</pre></td></tr>
+<tr> <td class="numLine"> 591</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 592</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 593</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 594</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link Conditions} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 595</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 596</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param notBefore Earliest time at which assertion is valid.</span></pre></td></tr>
+<tr> <td class="numLine"> 597</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param notOnOrAfter Latest time at which assertion is valid.</span></pre></td></tr>
+<tr> <td class="numLine"> 598</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param restriction The audience restriction that must be satisfied.</span></pre></td></tr>
+<tr> <td class="numLine"> 599</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>Conditions</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 600</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 601</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Conditions makeConditions(DateTime notBefore, DateTime notOnOrAfter,</pre></td></tr>
+<tr> <td class="numLine"> 602</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> AudienceRestriction restriction) {</pre></td></tr>
+<tr> <td class="numLineCover"> 603</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Conditions conditions = conditionsBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 604</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> conditions.setNotBefore(notBefore);</pre></td></tr>
+<tr> <td class="numLineCover"> 605</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> conditions.setNotOnOrAfter(notOnOrAfter);</pre></td></tr>
+<tr> <td class="numLineCover"> 606</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> conditions.getAudienceRestrictions().add(restriction);</pre></td></tr>
+<tr> <td class="numLineCover"> 607</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> conditions;</pre></td></tr>
+<tr> <td class="numLine"> 608</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 609</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 610</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 611</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link Issuer} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 612</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 613</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param name The issuer of a response object. In the absence of a specific format, this is a</span></pre></td></tr>
+<tr> <td class="numLine"> 614</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * URI identifying the issuer.</span></pre></td></tr>
+<tr> <td class="numLine"> 615</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>Issuer</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 616</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 617</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> Issuer makeIssuer(String name) {</pre></td></tr>
+<tr> <td class="numLineCover"> 618</td> <td class="nbHitsCovered"> 40</td> <td class="src"><pre class="src"> Issuer issuer = issuerBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 619</td> <td class="nbHitsCovered"> 40</td> <td class="src"><pre class="src"> issuer.setValue(name);</pre></td></tr>
+<tr> <td class="numLineCover"> 620</td> <td class="nbHitsCovered"> 40</td> <td class="src"><pre class="src"> <span class="keyword">return</span> issuer;</pre></td></tr>
+<tr> <td class="numLine"> 621</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 622</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 623</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 624</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link NameID} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 625</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 626</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param name The name represented by this object.</span></pre></td></tr>
+<tr> <td class="numLine"> 627</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>NameID</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 628</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 629</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> NameID makeNameId(String name) {</pre></td></tr>
+<tr> <td class="numLineCover"> 630</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> NameID id = nameIDBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 631</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> id.setValue(name);</pre></td></tr>
+<tr> <td class="numLineCover"> 632</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">return</span> id;</pre></td></tr>
+<tr> <td class="numLine"> 633</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 634</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 635</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 636</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link Response} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 637</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 638</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issuer The entity issuing this response.</span></pre></td></tr>
+<tr> <td class="numLine"> 639</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issueInstant The time of issue for this statement.</span></pre></td></tr>
+<tr> <td class="numLine"> 640</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param status The <code>Status</code> object indicating the success of requested action.</span></pre></td></tr>
+<tr> <td class="numLine"> 641</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param request The request that this is a response to.</span></pre></td></tr>
+<tr> <td class="numLine"> 642</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param assertions The assertions carried by this response.</span></pre></td></tr>
+<tr> <td class="numLine"> 643</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>Response</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 644</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 645</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Response makeResponse(String issuer, DateTime issueInstant,</pre></td></tr>
+<tr> <td class="numLine"> 646</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Status status, RequestAbstractType request, Assertion... assertions) {</pre></td></tr>
+<tr> <td class="numLineCover"> 647</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> <span class="keyword">return</span> makeResponse(issuer, issueInstant, status, request.getID(), assertions);</pre></td></tr>
+<tr> <td class="numLine"> 648</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 649</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 650</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 651</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link Response} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 652</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 653</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issuer The entity issuing this response.</span></pre></td></tr>
+<tr> <td class="numLine"> 654</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param issueInstant The time of issue for this statement.</span></pre></td></tr>
+<tr> <td class="numLine"> 655</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param status The <code>Status</code> object indicating the success of requested action.</span></pre></td></tr>
+<tr> <td class="numLine"> 656</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param inResponseTo The message ID of the request this is a response to.</span></pre></td></tr>
+<tr> <td class="numLine"> 657</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param assertions The assertions carried by this response.</span></pre></td></tr>
+<tr> <td class="numLine"> 658</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>Response</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 659</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="keyword">public</span> <span class="keyword">static</span> Response makeResponse(String issuer, DateTime issueInstant, Status status,</pre></td></tr>
+<tr> <td class="numLine"> 661</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String inResponseTo, Assertion... assertions) {</pre></td></tr>
+<tr> <td class="numLineCover"> 662</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> Response response = responseBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 663</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> initializeResponse(response, issuer, issueInstant, status, inResponseTo);</pre></td></tr>
+<tr> <td class="numLineCover"> 664</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> response.getAssertions().addAll(Arrays.asList(assertions));</pre></td></tr>
+<tr> <td class="numLineCover"> 665</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">return</span> response;</pre></td></tr>
+<tr> <td class="numLine"> 666</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 667</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 668</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 669</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link Status} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 670</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 671</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param value A URI specifying one of the standard SAML status codes.</span></pre></td></tr>
+<tr> <td class="numLine"> 672</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>Status</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 673</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 674</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Status makeStatus(String value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 675</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> Status status = statusBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 676</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> status.setStatusCode(makeStatusCode(value));</pre></td></tr>
+<tr> <td class="numLineCover"> 677</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> <span class="keyword">return</span> status;</pre></td></tr>
+<tr> <td class="numLine"> 678</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 681</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link Status} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 682</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 683</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * A convenience method that generates a status object with a message.</span></pre></td></tr>
+<tr> <td class="numLine"> 684</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 685</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param value A URI specifying one of the standard SAML status codes.</span></pre></td></tr>
+<tr> <td class="numLine"> 686</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param message A string describing the status.</span></pre></td></tr>
+<tr> <td class="numLine"> 687</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>Status</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 688</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 689</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Status makeStatus(String value, String message) {</pre></td></tr>
+<tr> <td class="numLineCover"> 690</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Status status = makeStatus(value);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 691</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> status.setStatusMessage(makeStatusMessage(message));</span></pre></td></tr>
+<tr> <td class="numLineCover"> 692</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> status;</span></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="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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 696</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link Status} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 697</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 698</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param statusCode A status code indicating result status of a request.</span></pre></td></tr>
+<tr> <td class="numLine"> 699</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param statusMessage An optional message providing human-readable detail of the status.</span></pre></td></tr>
+<tr> <td class="numLine"> 700</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new {@link Status} object.</span></pre></td></tr>
+<tr> <td class="numLine"> 701</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 702</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Status makeStatus(StatusCode statusCode, StatusMessage statusMessage) {</pre></td></tr>
+<tr> <td class="numLineCover"> 703</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Status status = statusBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 704</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> status.setStatusCode(statusCode);</pre></td></tr>
+<tr> <td class="numLineCover"> 705</td> <td class="nbHitsUncovered"><a title="Line 705: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 705: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (statusMessage != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 706</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> status.setStatusMessage(statusMessage);</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="numLineCover"> 708</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> status;</pre></td></tr>
+<tr> <td class="numLine"> 709</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 710</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 711</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 712</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for a successful SAML status element.</span></pre></td></tr>
+<tr> <td class="numLine"> 713</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 714</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A successful {@link Status} element.</span></pre></td></tr>
+<tr> <td class="numLine"> 715</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 716</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Status makeSuccessfulStatus() {</pre></td></tr>
+<tr> <td class="numLineCover"> 717</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> makeStatus(makeStatusCode(StatusCode.SUCCESS_URI), <span class="keyword">null</span>);</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"> </pre></td></tr>
+<tr> <td class="numLine"> 720</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 721</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link StatusCode} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 722</td> <td class="nbHits"> </td>
+ <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"> * @param value A URI specifying one of the standard SAML status codes.</span></pre></td></tr>
+<tr> <td class="numLine"> 724</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>StatusCode</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 725</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 726</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> StatusCode makeStatusCode(String value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 727</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> StatusCode code = statusCodeBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 728</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> code.setValue(value);</pre></td></tr>
+<tr> <td class="numLineCover"> 729</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">return</span> code;</pre></td></tr>
+<tr> <td class="numLine"> 730</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 731</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 732</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 733</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link StatusMessage} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 734</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 735</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param value A status message string.</span></pre></td></tr>
+<tr> <td class="numLine"> 736</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>StatusMessage</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 737</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 738</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> StatusMessage makeStatusMessage(String value) {</pre></td></tr>
+<tr> <td class="numLineCover"> 739</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> StatusMessage message = statusMessageBuilder.buildObject();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 740</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> message.setMessage(value);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 741</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> message;</span></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="numLine"> 744</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 745</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link Subject} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 746</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 747</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param name The name identifying the subject.</span></pre></td></tr>
+<tr> <td class="numLine"> 748</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param confirmations The confirmations for this subject.</span></pre></td></tr>
+<tr> <td class="numLine"> 749</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>Subject</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 750</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 751</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Subject makeSubject(String name, SubjectConfirmation... confirmations) {</pre></td></tr>
+<tr> <td class="numLineCover"> 752</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> Subject samlSubject = subjectBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 753</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> samlSubject.setNameID(makeNameId(name));</pre></td></tr>
+<tr> <td class="numLineCover"> 754</td> <td class="nbHitsUncovered"><a title="Line 754: Conditional coverage 50% (1/2)."> 12</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 754: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (confirmations != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 755</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> samlSubject.getSubjectConfirmations().addAll(Arrays.asList(confirmations));</pre></td></tr>
+<tr> <td class="numLine"> 756</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 757</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">return</span> samlSubject;</pre></td></tr>
+<tr> <td class="numLine"> 758</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"> </pre></td></tr>
+<tr> <td class="numLine"> 760</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 761</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link SubjectConfirmation} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 762</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 763</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param method The method used to confirm the subject.</span></pre></td></tr>
+<tr> <td class="numLine"> 764</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param data The data about the confirmation.</span></pre></td></tr>
+<tr> <td class="numLine"> 765</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>SubjectConfirmation</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 766</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 767</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> SubjectConfirmation makeSubjectConfirmation(String method,</pre></td></tr>
+<tr> <td class="numLine"> 768</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SubjectConfirmationData data) {</pre></td></tr>
+<tr> <td class="numLineCover"> 769</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> SubjectConfirmation confirmation = subjectConfirmationBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 770</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> confirmation.setMethod(method);</pre></td></tr>
+<tr> <td class="numLineCover"> 771</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> confirmation.setSubjectConfirmationData(data);</pre></td></tr>
+<tr> <td class="numLineCover"> 772</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> confirmation;</pre></td></tr>
+<tr> <td class="numLine"> 773</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 774</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 775</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 776</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link SubjectConfirmationData} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 777</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 778</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param recipient The entity ID of the intended recipient.</span></pre></td></tr>
+<tr> <td class="numLine"> 779</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param expirationTime The expiration time for this subject.</span></pre></td></tr>
+<tr> <td class="numLine"> 780</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param inResponseTo The message ID of the AuthnRequest this is a response to.</span></pre></td></tr>
+<tr> <td class="numLine"> 781</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>SubjectConfirmationData</code> object.</span></pre></td></tr>
+<tr> <td class="numLine"> 782</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 783</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> SubjectConfirmationData makeSubjectConfirmationData(String recipient,</pre></td></tr>
+<tr> <td class="numLine"> 784</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> DateTime expirationTime, String inResponseTo) {</pre></td></tr>
+<tr> <td class="numLineCover"> 785</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> SubjectConfirmationData data = subjectConfirmationDataBuilder.buildObject();</pre></td></tr>
+<tr> <td class="numLineCover"> 786</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> data.setRecipient(recipient);</pre></td></tr>
+<tr> <td class="numLineCover"> 787</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> data.setNotOnOrAfter(expirationTime);</pre></td></tr>
+<tr> <td class="numLineCover"> 788</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> data.setInResponseTo(inResponseTo);</pre></td></tr>
+<tr> <td class="numLineCover"> 789</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> data;</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="comment">/*</span></pre></td></tr>
+<tr> <td class="numLine"> 793</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Metadata descriptions.</span></pre></td></tr>
+<tr> <td class="numLine"> 794</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<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="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 797</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for SAML {@link SingleSignOnService} objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 798</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 799</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param binding The SAML binding implemented by this service.</span></pre></td></tr>
+<tr> <td class="numLine"> 800</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param location The URL that the service listens to.</span></pre></td></tr>
+<tr> <td class="numLine"> 801</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new <code>SingleSignOnService</code> object.</span></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="keyword">public</span> <span class="keyword">static</span> SingleSignOnService makeSingleSignOnService(String binding, String location) {</pre></td></tr>
+<tr> <td class="numLineCover"> 804</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> SingleSignOnService service = singleSignOnServiceBuilder.buildObject();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 805</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> service.setBinding(binding);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 806</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> service.setLocation(location);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 807</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> service;</span></pre></td></tr>
+<tr> <td class="numLine"> 808</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 809</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 810</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/*</span></pre></td></tr>
+<tr> <td class="numLine"> 811</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Endpoint selection</span></pre></td></tr>
+<tr> <td class="numLine"> 812</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></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="numLine"> 814</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> initializeLocalEntity(</pre></td></tr>
+<tr> <td class="numLine"> 815</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SAMLMessageContext<? <span class="keyword">extends</span> SAMLObject, ? <span class="keyword">extends</span> SAMLObject, ? <span class="keyword">extends</span> SAMLObject> context,</pre></td></tr>
+<tr> <td class="numLine"> 816</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> EntityDescriptor entity, RoleDescriptor role) {</pre></td></tr>
+<tr> <td class="numLineCover"> 817</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> initializeLocalEntity(context, entity);</pre></td></tr>
+<tr> <td class="numLineCover"> 818</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> context.setLocalEntityRole(role.getElementQName());</pre></td></tr>
+<tr> <td class="numLineCover"> 819</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> context.setLocalEntityRoleMetadata(role);</pre></td></tr>
+<tr> <td class="numLineCover"> 820</td> <td class="nbHitsCovered"> 17</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"> </pre></td></tr>
+<tr> <td class="numLine"> 822</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> initializeLocalEntity(</pre></td></tr>
+<tr> <td class="numLine"> 823</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SAMLMessageContext<? <span class="keyword">extends</span> SAMLObject, ? <span class="keyword">extends</span> SAMLObject, ? <span class="keyword">extends</span> SAMLObject> context,</pre></td></tr>
+<tr> <td class="numLine"> 824</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> EntityDescriptor entity) {</pre></td></tr>
+<tr> <td class="numLineCover"> 825</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> context.setLocalEntityId(entity.getEntityID());</pre></td></tr>
+<tr> <td class="numLineCover"> 826</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> context.setLocalEntityMetadata(entity);</pre></td></tr>
+<tr> <td class="numLineCover"> 827</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> context.setOutboundMessageIssuer(entity.getEntityID());</pre></td></tr>
+<tr> <td class="numLineCover"> 828</td> <td class="nbHitsCovered"> 17</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"> </pre></td></tr>
+<tr> <td class="numLine"> 830</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> initializePeerEntity(</pre></td></tr>
+<tr> <td class="numLine"> 831</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SAMLMessageContext<? <span class="keyword">extends</span> SAMLObject, ? <span class="keyword">extends</span> SAMLObject, ? <span class="keyword">extends</span> SAMLObject> context,</pre></td></tr>
+<tr> <td class="numLine"> 832</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> EntityDescriptor entity, RoleDescriptor role, QName endpointType, String binding) {</pre></td></tr>
+<tr> <td class="numLineCover"> 833</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> context.setPeerEntityId(entity.getEntityID());</pre></td></tr>
+<tr> <td class="numLineCover"> 834</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> context.setPeerEntityMetadata(entity);</pre></td></tr>
+<tr> <td class="numLineCover"> 835</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> context.setPeerEntityRole(role.getElementQName());</pre></td></tr>
+<tr> <td class="numLineCover"> 836</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> context.setPeerEntityRoleMetadata(role);</pre></td></tr>
+<tr> <td class="numLine"> 837</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> {</pre></td></tr>
+<tr> <td class="numLineCover"> 838</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> BasicEndpointSelector selector = <span class="keyword">new</span> BasicEndpointSelector();</pre></td></tr>
+<tr> <td class="numLineCover"> 839</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> selector.setEntityMetadata(entity);</pre></td></tr>
+<tr> <td class="numLineCover"> 840</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> selector.setEndpointType(endpointType);</pre></td></tr>
+<tr> <td class="numLineCover"> 841</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> selector.setEntityRoleMetadata(role);</pre></td></tr>
+<tr> <td class="numLineCover"> 842</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> selector.getSupportedIssuerBindings().add(binding);</pre></td></tr>
+<tr> <td class="numLineCover"> 843</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> context.setPeerEntityEndpoint(selector.selectEndpoint());</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="numLineCover"> 845</td> <td class="nbHitsCovered"> 16</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="numLine"> 847</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/*</span></pre></td></tr>
+<tr> <td class="numLine"> 848</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Identifiers</span></pre></td></tr>
+<tr> <td class="numLine"> 849</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 850</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 851</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 852</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Generate a random identifier.</span></pre></td></tr>
+<tr> <td class="numLine"> 853</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 854</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new identifier string.</span></pre></td></tr>
+<tr> <td class="numLine"> 855</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 856</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> String generateIdentifier() {</pre></td></tr>
+<tr> <td class="numLineCover"> 857</td> <td class="nbHitsCovered"> 40</td> <td class="src"><pre class="src"> <span class="keyword">return</span> idGenerator.generateIdentifier();</pre></td></tr>
+<tr> <td class="numLine"> 858</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 859</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 860</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/*</span></pre></td></tr>
+<tr> <td class="numLine"> 861</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Context and codecs</span></pre></td></tr>
+<tr> <td class="numLine"> 862</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 863</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 864</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 865</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Static factory for OpenSAML message-context objects.</span></pre></td></tr>
+<tr> <td class="numLine"> 866</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 867</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param <TI> The type of the request object.</span></pre></td></tr>
+<tr> <td class="numLine"> 868</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param <TO> The type of the response object.</span></pre></td></tr>
+<tr> <td class="numLine"> 869</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param <TN> The type of the name identifier used for subjects.</span></pre></td></tr>
+<tr> <td class="numLine"> 870</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new message-context object.</span></pre></td></tr>
+<tr> <td class="numLine"> 871</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 872</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <TI <span class="keyword">extends</span> SAMLObject, TO <span class="keyword">extends</span> SAMLObject, TN <span class="keyword">extends</span> SAMLObject></pre></td></tr>
+<tr> <td class="numLine"> 873</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SAMLMessageContext<TI, TO, TN> makeSamlMessageContext() {</pre></td></tr>
+<tr> <td class="numLineCover"> 874</td> <td class="nbHitsCovered"> 34</td> <td class="src"><pre class="src"> SAMLMessageContext<TI, TO, TN> context = <span class="keyword">new</span> BasicSAMLMessageContext<TI, TO, TN>();</pre></td></tr>
+<tr> <td class="numLineCover"> 875</td> <td class="nbHitsCovered"> 34</td> <td class="src"><pre class="src"> context.setInboundSAMLProtocol(SAML20P_NS); <span class="comment">// we only use SAML 2.0</span></pre></td></tr>
+<tr> <td class="numLineCover"> 876</td> <td class="nbHitsCovered"> 34</td> <td class="src"><pre class="src"> context.setOutboundSAMLProtocol(SAML20P_NS);</pre></td></tr>
+<tr> <td class="numLineCover"> 877</td> <td class="nbHitsCovered"> 34</td> <td class="src"><pre class="src"> <span class="keyword">return</span> context;</pre></td></tr>
+<tr> <td class="numLine"> 878</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 879</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 880</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 881</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Run a message encoder.</span></pre></td></tr>
+<tr> <td class="numLine"> 882</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 883</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param encoder The message encoder to run.</span></pre></td></tr>
+<tr> <td class="numLine"> 884</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param context The message context to pass to the encoder.</span></pre></td></tr>
+<tr> <td class="numLine"> 885</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException if unable to encode message.</span></pre></td></tr>
+<tr> <td class="numLine"> 886</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 887</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> runEncoder(MessageEncoder encoder, MessageContext context)</pre></td></tr>
+<tr> <td class="numLine"> 888</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLine"> 889</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 890</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> encoder.encode(context);</pre></td></tr>
+<tr> <td class="numLineCover"> 891</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (MessageEncodingException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 892</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(e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 893</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 894</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 895</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 896</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 897</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Run a message decoder.</span></pre></td></tr>
+<tr> <td class="numLine"> 898</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 899</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param decoder The message decoder to run.</span></pre></td></tr>
+<tr> <td class="numLine"> 900</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param context The message context to pass to the decoder.</span></pre></td></tr>
+<tr> <td class="numLine"> 901</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException if unable to decode message.</span></pre></td></tr>
+<tr> <td class="numLine"> 902</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 903</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> runDecoder(MessageDecoder decoder, MessageContext context)</pre></td></tr>
+<tr> <td class="numLine"> 904</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLine"> 905</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 906</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> decoder.decode(context);</pre></td></tr>
+<tr> <td class="numLineCover"> 907</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (MessageDecodingException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 908</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(e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 909</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (SecurityException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 910</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(e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 911</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 912</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 913</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 914</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 915</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get a string for the current date/time, in the correct format for SAML.</span></pre></td></tr>
+<tr> <td class="numLine"> 916</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 917</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The corresponding string.</span></pre></td></tr>
+<tr> <td class="numLine"> 918</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 919</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> String samlDateString() {</pre></td></tr>
+<tr> <td class="numLineCover"> 920</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> samlDateString(<span class="keyword">new</span> DateTime());</span></pre></td></tr>
+<tr> <td class="numLine"> 921</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 922</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 923</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 924</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get a string for a given date/time, in the correct format for SAML.</span></pre></td></tr>
+<tr> <td class="numLine"> 925</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 926</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param date The date/time to convert.</span></pre></td></tr>
+<tr> <td class="numLine"> 927</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The corresponding string.</span></pre></td></tr>
+<tr> <td class="numLine"> 928</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 929</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> String samlDateString(DateTime date) {</pre></td></tr>
+<tr> <td class="numLineCover"> 930</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">synchronized</span> (samlDateStringLock) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 931</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> Configuration.getSAMLDateFormatter().print(date);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 932</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 933</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 934</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 935</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> Object samlDateStringLock = <span class="keyword">new</span> Object();</pre></td></tr>
+<tr> <td class="numLine"> 936</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 937</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 938</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get a SAML metadata provider that reads from a specified file. The provider adjusts</span></pre></td></tr>
+<tr> <td class="numLine"> 939</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * its output as the file is changed.</span></pre></td></tr>
+<tr> <td class="numLine"> 940</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 941</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param file The file containing the metadata.</span></pre></td></tr>
+<tr> <td class="numLine"> 942</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A metadata provider for the given file.</span></pre></td></tr>
+<tr> <td class="numLine"> 943</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws MetadataProviderException if there are problems reading the file.</span></pre></td></tr>
+<tr> <td class="numLine"> 944</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 945</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> ObservableMetadataProvider getMetadataFromFile(File file)</pre></td></tr>
+<tr> <td class="numLine"> 946</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> MetadataProviderException {</pre></td></tr>
+<tr> <td class="numLineCover"> 947</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> FilesystemMetadataProvider provider = <span class="keyword">new</span> FilesystemMetadataProvider(file);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 948</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> provider.setParserPool(<span class="keyword">new</span> BasicParserPool());</span></pre></td></tr>
+<tr> <td class="numLine"> 949</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Causes null-pointer errors in OpenSAML code:</span></pre></td></tr>
+<tr> <td class="numLine"> 950</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//provider.setRequireValidMetadata(true);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 951</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> provider;</span></pre></td></tr>
+<tr> <td class="numLine"> 952</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 953</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 954</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 955</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Make a static security-policy resolver that resolves to a given policy.</span></pre></td></tr>
+<tr> <td class="numLine"> 956</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 957</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param policy The security policy to resolve to.</span></pre></td></tr>
+<tr> <td class="numLine"> 958</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A security-policy resolver that resolves to the given policy.</span></pre></td></tr>
+<tr> <td class="numLine"> 959</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 960</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> SecurityPolicyResolver makeStaticSecurityPolicyResolver(SecurityPolicy policy) {</pre></td></tr>
+<tr> <td class="numLineCover"> 961</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> StaticSecurityPolicyResolver(policy);</span></pre></td></tr>
+<tr> <td class="numLine"> 962</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 963</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 964</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 965</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Make a static security-policy resolver that resolves to a given policy.</span></pre></td></tr>
+<tr> <td class="numLine"> 966</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 967</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param rules The policy rules that comprise the returned policy.</span></pre></td></tr>
+<tr> <td class="numLine"> 968</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A security-policy resolver that resolves to the given policy.</span></pre></td></tr>
+<tr> <td class="numLine"> 969</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 970</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> SecurityPolicyResolver makeStaticSecurityPolicyResolver(</pre></td></tr>
+<tr> <td class="numLine"> 971</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SecurityPolicyRule... rules) {</pre></td></tr>
+<tr> <td class="numLineCover"> 972</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> makeStaticSecurityPolicyResolver(makeBasicSecurityPolicy(rules));</span></pre></td></tr>
+<tr> <td class="numLine"> 973</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 974</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 975</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 976</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Make a basic security policy, consisting of a set of rules that must all be satisfied.</span></pre></td></tr>
+<tr> <td class="numLine"> 977</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 978</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param rules The rules comprising the policy.</span></pre></td></tr>
+<tr> <td class="numLine"> 979</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new security policy.</span></pre></td></tr>
+<tr> <td class="numLine"> 980</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 981</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> SecurityPolicy makeBasicSecurityPolicy(SecurityPolicyRule... rules) {</pre></td></tr>
+<tr> <td class="numLineCover"> 982</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> BasicSecurityPolicy securityPolicy = <span class="keyword">new</span> BasicSecurityPolicy();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 983</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> securityPolicy.getPolicyRules().addAll(Arrays.asList(rules));</span></pre></td></tr>
+<tr> <td class="numLineCover"> 984</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> securityPolicy;</span></pre></td></tr>
+<tr> <td class="numLine"> 985</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 986</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 987</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> KeyInfoCredentialResolver standardKeyInfoCredentialResolver = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 988</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 989</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 990</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Make a KeyInfoCredentialResolver that knows about some basic credential types.</span></pre></td></tr>
+<tr> <td class="numLine"> 991</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 992</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new KeyInfoCredentialResolver.</span></pre></td></tr>
+<tr> <td class="numLine"> 993</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 994</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">synchronized</span> KeyInfoCredentialResolver getStandardKeyInfoCredentialResolver() {</pre></td></tr>
+<tr> <td class="numLineCover"> 995</td> <td class="nbHitsUncovered"><a title="Line 995: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 995: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (standardKeyInfoCredentialResolver == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 996</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> List<KeyInfoProvider> providers = Lists.newArrayList();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 997</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> providers.add(<span class="keyword">new</span> DSAKeyValueProvider());</span></pre></td></tr>
+<tr> <td class="numLineCover"> 998</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> providers.add(<span class="keyword">new</span> RSAKeyValueProvider());</span></pre></td></tr>
+<tr> <td class="numLineCover"> 999</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> providers.add(<span class="keyword">new</span> InlineX509DataProvider());</span></pre></td></tr>
+<tr> <td class="numLineCover"> 1000</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> standardKeyInfoCredentialResolver = <span class="keyword">new</span> BasicProviderKeyInfoCredentialResolver(providers);</span></pre></td></tr>
+<tr> <td class="numLine"> 1001</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 1002</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> standardKeyInfoCredentialResolver;</span></pre></td></tr>
+<tr> <td class="numLine"> 1003</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 1004</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 1005</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 1006</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Return the standard credentials from a given KeyInfo object.</span></pre></td></tr>
+<tr> <td class="numLine"> 1007</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 1008</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param keyInfo The KeyInfo object to examine.</span></pre></td></tr>
+<tr> <td class="numLine"> 1009</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The standard credentials found in the object.</span></pre></td></tr>
+<tr> <td class="numLine"> 1010</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws SecurityException</span></pre></td></tr>
+<tr> <td class="numLine"> 1011</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 1012</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Iterable<Credential> resolveStandardKeyInfoCredentials(KeyInfo keyInfo)</pre></td></tr>
+<tr> <td class="numLine"> 1013</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> SecurityException {</pre></td></tr>
+<tr> <td class="numLineCover"> 1014</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> getStandardKeyInfoCredentialResolver()</span></pre></td></tr>
+<tr> <td class="numLine"> 1015</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .resolve(<span class="keyword">new</span> CriteriaSet(<span class="keyword">new</span> KeyInfoCriteria(keyInfo)));</pre></td></tr>
+<tr> <td class="numLine"> 1016</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 1017</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 1018</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 1019</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Does a given peer's metadata support verification of signed messages?</span></pre></td></tr>
+<tr> <td class="numLine"> 1020</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 1021</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param context The SAML message context containing the peer's metadata.</span></pre></td></tr>
+<tr> <td class="numLine"> 1022</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return True if the role supports verification of signed messages.</span></pre></td></tr>
+<tr> <td class="numLine"> 1023</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 1024</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">boolean</span> peerSupportsSignatureVerification(</pre></td></tr>
+<tr> <td class="numLine"> 1025</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SAMLMessageContext<? <span class="keyword">extends</span> SAMLObject, ? <span class="keyword">extends</span> SAMLObject, ? <span class="keyword">extends</span> SAMLObject></pre></td></tr>
+<tr> <td class="numLine"> 1026</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> context) {</pre></td></tr>
+<tr> <td class="numLineCover"> 1027</td> <td class="nbHitsUncovered"><a title="Line 1027: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 1027: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (KeyDescriptor keyDescriptor : context.getPeerEntityRoleMetadata().getKeyDescriptors()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 1028</td> <td class="nbHitsUncovered"><a title="Line 1028: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 1028: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (keyDescriptor.getUse() == UsageType.SIGNING) {</a></span></pre></td></tr>
+<tr> <td class="numLine"> 1029</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 1030</td> <td class="nbHitsUncovered"><a title="Line 1030: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 1030: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (resolveStandardKeyInfoCredentials(keyDescriptor.getKeyInfo()).iterator().hasNext()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 1031</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">true</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 1032</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 1033</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (SecurityException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 1034</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">"Got SecurityException while extracting credentials:"</span>, e);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 1035</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 1036</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 1037</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 1038</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 1039</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 1040</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 1041</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 1042</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Read a PEM-encoded private-key file and return it as a {@link PrivateKey} object.</span></pre></td></tr>
+<tr> <td class="numLine"> 1043</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 1044</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param file The file to read.</span></pre></td></tr>
+<tr> <td class="numLine"> 1045</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The private-key object, never null.</span></pre></td></tr>
+<tr> <td class="numLine"> 1046</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException if there's some kind of error reading or converting the file.</span></pre></td></tr>
+<tr> <td class="numLine"> 1047</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 1048</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> PrivateKey readPrivateKeyFile(File file)</pre></td></tr>
+<tr> <td class="numLine"> 1049</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLine"> 1050</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 1051</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> SecurityHelper.decodePrivateKey(file, <span class="keyword">new</span> <span class="keyword">char</span>[0]);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 1052</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (KeyException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 1053</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(e);</span></pre></td></tr>
+<tr> <td class="numLine"> 1054</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 1055</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 1056</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 1057</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 1058</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Convert an OpenSAML object to a DOM object.</span></pre></td></tr>
+<tr> <td class="numLine"> 1059</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 1060</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param xmlObject The OpenSAML object to convert.</span></pre></td></tr>
+<tr> <td class="numLine"> 1061</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The corresponding DOM object.</span></pre></td></tr>
+<tr> <td class="numLine"> 1062</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws MarshallingException if unable to convert object.</span></pre></td></tr>
+<tr> <td class="numLine"> 1063</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 1064</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Element marshallXmlObject(XMLObject xmlObject) <span class="keyword">throws</span> MarshallingException {</pre></td></tr>
+<tr> <td class="numLineCover"> 1065</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> Configuration.getMarshallerFactory().getMarshaller(xmlObject).marshall(xmlObject);</span></pre></td></tr>
+<tr> <td class="numLine"> 1066</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 1067</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 1068</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 1069</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Convert a DOM object to an OpenSAML object.</span></pre></td></tr>
+<tr> <td class="numLine"> 1070</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 1071</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param element A DOM object representing a SAML element.</span></pre></td></tr>
+<tr> <td class="numLine"> 1072</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The corresponding OpenSAML object.</span></pre></td></tr>
+<tr> <td class="numLine"> 1073</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws UnmarshallingException if unable to convert object.</span></pre></td></tr>
+<tr> <td class="numLine"> 1074</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 1075</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> XMLObject unmarshallXmlObject(Element element) <span class="keyword">throws</span> UnmarshallingException {</pre></td></tr>
+<tr> <td class="numLineCover"> 1076</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> Configuration.getUnmarshallerFactory().getUnmarshaller(element).unmarshall(element);</span></pre></td></tr>
+<tr> <td class="numLine"> 1077</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 1078</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 1079</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 1080</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Make a new artifact map.</span></pre></td></tr>
+<tr> <td class="numLine"> 1081</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 1082</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param artifactLifetime The lifetime of the map's artifacts, in milliseconds.</span></pre></td></tr>
+<tr> <td class="numLine"> 1083</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A new artifact map.</span></pre></td></tr>
+<tr> <td class="numLine"> 1084</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 1085</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> SAMLArtifactMap makeArtifactMap(<span class="keyword">int</span> artifactLifetime) {</pre></td></tr>
+<tr> <td class="numLineCover"> 1086</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> BasicSAMLArtifactMap(</span></pre></td></tr>
+<tr> <td class="numLine"> 1087</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> BasicParserPool(),</pre></td></tr>
+<tr> <td class="numLine"> 1088</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> MapBasedStorageService<String, SAMLArtifactMapEntry>(),</pre></td></tr>
+<tr> <td class="numLine"> 1089</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> artifactLifetime);</pre></td></tr>
+<tr> <td class="numLine"> 1090</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 1091</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.saml.SamlLogUtil.html b/coverage/com.google.enterprise.adaptor.secmgr.saml.SamlLogUtil.html
new file mode 100644
index 0000000..ba6c655
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.saml.SamlLogUtil.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.saml.SamlLogUtil</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.SamlLogUtil.html">SamlLogUtil</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">5</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">5/10</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">1/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5;</span>3.5</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2009 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.saml;</pre></td></tr>
+<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.enterprise.adaptor.secmgr.common.XmlUtil;</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> org.opensaml.Configuration;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.common.SAMLObject;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.io.MarshallingException;</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.w3c.dom.Element;</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>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.io.IOException;</pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Utilities for logging SAML messages.</span></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>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> SamlLogUtil {</pre></td></tr>
+<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 31</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> SamlLogUtil() {</span></pre></td></tr>
+<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// prevent instantiation</span></pre></td></tr>
+<tr> <td class="numLineCover"> 33</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> UnsupportedOperationException();</span></pre></td></tr>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Generate a log message containing a SAML object. The returned string</span></pre></td></tr>
+<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * should be passed to a logger; if there's an error converting the SAML</span></pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * object to a string, the returned string will be an error message. In</span></pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * either case we log the result.</span></pre></td></tr>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param message Some text that will be prefixed to the log entry.</span></pre></td></tr>
+<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param so A SAML object that will be converted to a string and appended to</span></pre></td></tr>
+<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * the log entry.</span></pre></td></tr>
+<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A suitably formatted log message.</span></pre></td></tr>
+<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException if unable to serialize XML string.</span></pre></td></tr>
+<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> String xmlMessage(String message, SAMLObject so)</pre></td></tr>
+<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 50</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> Element element = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 52</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> element = Configuration.getMarshallerFactory().getMarshaller(so).marshall(so);</pre></td></tr>
+<tr> <td class="numLineCover"> 53</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (MarshallingException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 54</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> message + <span class="string">": MarshallingException while marshalling "</span> + so.toString() +</span></pre></td></tr>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">": "</span> + e.getMessage();</pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 57</td> <td class="nbHitsUncovered"><a title="Line 57: Conditional coverage 50% (1/2)."> 4</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 57: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (element == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 58</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> message + <span class="string">": SAMLObject marshalls to null "</span> + so.toString();</span></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"> 60</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> message + <span class="string">":\n"</span> + XmlUtil.getInstance().buildXmlString(element.getOwnerDocument());</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>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/com.google.enterprise.adaptor.secmgr.servlets.ResponseParser.html b/coverage/com.google.enterprise.adaptor.secmgr.servlets.ResponseParser.html
new file mode 100644
index 0000000..a2d6686
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.secmgr.servlets.ResponseParser.html
@@ -0,0 +1,716 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.servlets.ResponseParser</h5>
+<div class="separator"> </div>
+<table class="report">
+<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.servlets.ResponseParser.html">ResponseParser</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">11</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:86px"><span class="text">71/82</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">50</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:58px"><span class="text">70/120</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.586206896551724;</span>2.586</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.servlets.ResponseParser.html">ResponseParser$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">2/2</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.586206896551724;</span>2.586</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.servlets.ResponseParser.html">ResponseParser$2</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">2/2</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.586206896551724;</span>2.586</td></tr>
+
+</table>
+<div class="separator"> </div>
+<table cellspacing="0" cellpadding="0" class="src">
+<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Copyright 2009 Google Inc.</span></pre></td></tr>
+<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
+<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// you may not use this file except in compliance with the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// You may obtain a copy of the License at</span></pre></td></tr>
+<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
+<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//</span></pre></td></tr>
+<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
+<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
+<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
+<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// See the License for the specific language governing permissions and</span></pre></td></tr>
+<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// limitations under the License.</span></pre></td></tr>
+<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">package</span> com.google.enterprise.adaptor.secmgr.servlets;</pre></td></tr>
+<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"> <span class="keyword">import</span> com.google.common.base.Predicate;</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.google.common.base.Strings;</pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.collect.ImmutableSet;</pre></td></tr>
+<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.common.collect.Iterables;</pre></td></tr>
+<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState;</pre></td></tr>
+<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.common.SecurityManagerUtil;</pre></td></tr>
+<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.modules.SamlClient;</pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil;</pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> com.google.enterprise.adaptor.secmgr.saml.SamlLogUtil;</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="keyword">import</span> org.joda.time.DateTime;</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.joda.time.DateTimeComparator;</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.joda.time.DateTimeUtils;</pre></td></tr>
+<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Assertion;</pre></td></tr>
+<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Attribute;</pre></td></tr>
+<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.AttributeStatement;</pre></td></tr>
+<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Audience;</pre></td></tr>
+<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.AudienceRestriction;</pre></td></tr>
+<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Conditions;</pre></td></tr>
+<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Issuer;</pre></td></tr>
+<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.NameIDType;</pre></td></tr>
+<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Response;</pre></td></tr>
+<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.Subject;</pre></td></tr>
+<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.SubjectConfirmation;</pre></td></tr>
+<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.saml2.core.SubjectConfirmationData;</pre></td></tr>
+<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> org.opensaml.xml.XMLObject;</pre></td></tr>
+<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 45</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"> 46</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"> 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"> 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"> 49</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> javax.annotation.concurrent.Immutable;</pre></td></tr>
+<tr> <td class="numLine"> 51</td> <td class="nbHits"> </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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * A parser to disassemble and validate a SAML Response element.</span></pre></td></tr>
+<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Immutable</pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> ResponseParser {</pre></td></tr>
+<tr> <td class="numLineCover"> 57</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 LOGGER = Logger.getLogger(ResponseParser.<span class="keyword">class</span>.getName());</pre></td></tr>
+<tr> <td class="numLineCover"> 58</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> DateTimeComparator dtComparator = DateTimeComparator.getInstance();</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="numLine"> 60</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> SamlClient client;</pre></td></tr>
+<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> String recipient;</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">final</span> Response response;</pre></td></tr>
+<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> String sessionId;</pre></td></tr>
+<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">long</span> now;</pre></td></tr>
+<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Assertion assertion;</pre></td></tr>
+<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">private</span> ResponseParser(SamlClient client, String recipient, Response response, String sessionId) {</pre></td></tr>
+<tr> <td class="numLineCover"> 68</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.client = client;</pre></td></tr>
+<tr> <td class="numLineCover"> 69</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.recipient = recipient;</pre></td></tr>
+<tr> <td class="numLineCover"> 70</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.response = response;</pre></td></tr>
+<tr> <td class="numLineCover"> 71</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.sessionId = sessionId;</pre></td></tr>
+<tr> <td class="numLineCover"> 72</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.now = DateTimeUtils.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 73</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.assertion = findSuitableAssertion();</pre></td></tr>
+<tr> <td class="numLineCover"> 74</td> <td class="nbHitsCovered"> 5</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">public</span> <span class="keyword">static</span> ResponseParser make(SamlClient client, String recipient, Response response,</pre></td></tr>
+<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String sessionId) {</pre></td></tr>
+<tr> <td class="numLineCover"> 78</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> ResponseParser(client, recipient, response, sessionId);</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"> </pre></td></tr>
+<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/** Log messages as info. */</span></pre></td></tr>
+<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> inform(String... messages) {</pre></td></tr>
+<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"><a title="Line 83: Conditional coverage 100% (2/2)."> 8</a></td> <td class="src"><pre class="src"> <a title="Line 83: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String message : messages) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 84</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> LOGGER.info(SecurityManagerUtil.sessionLogMessage(sessionId, message));</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="numLineCover"> 86</td> <td class="nbHitsCovered"> 4</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>
+<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/** Log messages as warnings. */</span></pre></td></tr>
+<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> warn(String... messages) {</pre></td></tr>
+<tr> <td class="numLineCover"> 90</td> <td class="nbHitsCovered"><a title="Line 90: Conditional coverage 100% (2/2)."> 22</a></td> <td class="src"><pre class="src"> <a title="Line 90: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String message : messages) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 91</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> LOGGER.warning(SecurityManagerUtil.sessionLogMessage(sessionId, message));</pre></td></tr>
+<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> }</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">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * If condition is false then log messages as warnings.</span></pre></td></tr>
+<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <p></span></pre></td></tr>
+<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * This method is used to modify a chain of &amp;&amp; boolean conditions.</span></pre></td></tr>
+<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * For example:</span></pre></td></tr>
+<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <pre></span></pre></td></tr>
+<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * return name != null</span></pre></td></tr>
+<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * && isValidName(name)</span></pre></td></tr>
+<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * && hasSession(name);</span></pre></td></tr>
+<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * </pre></span></pre></td></tr>
+<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * becomes:</span></pre></td></tr>
+<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <pre></span></pre></td></tr>
+<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * return warnIfFalse(name != null, "Name is null")</span></pre></td></tr>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * && warnIfFalse(isValidName(name), "Invalid name: " + name)</span></pre></td></tr>
+<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * && warnIfFalse(hasSession(name), "Missing session for: " + name);</span></pre></td></tr>
+<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * </pre></span></pre></td></tr>
+<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <p></span></pre></td></tr>
+<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return value of condition</span></pre></td></tr>
+<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> warnIfFalse(<span class="keyword">boolean</span> condition, String ... messages) {</pre></td></tr>
+<tr> <td class="numLineCover"> 115</td> <td class="nbHitsCovered"><a title="Line 115: Conditional coverage 100% (2/2)."> 158</a></td> <td class="src"><pre class="src"> <a title="Line 115: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!condition) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 116</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> warn(messages);</pre></td></tr>
+<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"> 158</td> <td class="src"><pre class="src"> <span class="keyword">return</span> condition;</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="numLine"> 120</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// to avoid having 3 try/catch loops in findSuitableAssertionHelper</span></pre></td></tr>
+<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> Assertion findSuitableAssertion() {</pre></td></tr>
+<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 124</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">return</span> findSuitableAssertionHelper();</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">catch</span> (IOException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 126</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.log(Level.WARNING, <span class="string">"An error occurred but logger could not parse "</span></span></pre></td></tr>
+<tr> <td class="numLine"> 127</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"the SamlResponse object."</span>, e);</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">return</span> <span class="keyword">null</span>;</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>
+<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">// TODO(cph): This logic is inadequate, but more or less the same as what the</span></pre></td></tr>
+<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// GSA does. Instead of trying to find a single valid assertion, we should</span></pre></td></tr>
+<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// analyze the assertions as a whole and combine their content. The SAML spec</span></pre></td></tr>
+<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// allows the IdP to include arbitrary numbers of assertions, and with each</span></pre></td></tr>
+<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// assertion an arbitrary number of statements. The spec explicitly states</span></pre></td></tr>
+<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// that an assertion with multiple statements is completely equivalent to</span></pre></td></tr>
+<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// multiple assertions, each with a single statement (provided the other parts</span></pre></td></tr>
+<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// of the assertions match one another). It's the responsibility of the</span></pre></td></tr>
+<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// relying party (us) to make sense of the information in whatever form the</span></pre></td></tr>
+<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// IdP sends it.</span></pre></td></tr>
+<tr> <td class="numLine"> 142</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> Assertion findSuitableAssertionHelper() <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 143</td> <td class="nbHitsCovered"><a title="Line 143: Conditional coverage 100% (2/2)."> 5</a></td> <td class="src"><pre class="src"> <a title="Line 143: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (response.getAssertions().isEmpty()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 144</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> warn(SamlLogUtil.xmlMessage(</pre></td></tr>
+<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Received no assertions in this response."</span>, response));</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="numLine"> 147</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 148</td> <td class="nbHitsCovered"><a title="Line 148: Conditional coverage 100% (2/2)."> 5</a></td> <td class="src"><pre class="src"> <a title="Line 148: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Assertion assertion : response.getAssertions()) {</a></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> (isAssertionValid(assertion)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 150</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> assertion;</pre></td></tr>
+<tr> <td class="numLine"> 151</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 152</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> warn(SamlLogUtil.xmlMessage(</pre></td></tr>
+<tr> <td class="numLine"> 153</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Rejected assertion because it was invalid"</span>, assertion));</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="numLineCover"> 155</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> warn(SamlLogUtil.xmlMessage(</pre></td></tr>
+<tr> <td class="numLine"> 156</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Could not find a valid assertion for this response"</span>, response));</pre></td></tr>
+<tr> <td class="numLineCover"> 157</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</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="numLine"> 159</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Is the response element valid?</span></pre></td></tr>
+<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 163</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> isResponseValid() {</pre></td></tr>
+<tr> <td class="numLineCover"> 164</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> Issuer issuer = response.getIssuer();</pre></td></tr>
+<tr> <td class="numLineCover"> 165</td> <td class="nbHitsUncovered"><a title="Line 165: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> 5</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 165: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">return</span> issuer == <span class="keyword">null</span> || isValidIssuer(issuer);</a></span></pre></td></tr>
+<tr> <td class="numLine"> 166</td> <td class="nbHits"> </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"> 168</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 169</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get the response status code.</span></pre></td></tr>
+<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Must satisfy {@link #isResponseValid} prior to calling.</span></pre></td></tr>
+<tr> <td class="numLine"> 171</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 172</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getResponseStatus() {</pre></td></tr>
+<tr> <td class="numLineCover"> 173</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> response.getStatus().getStatusCode().getValue();</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"> </pre></td></tr>
+<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"> 177</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Are the assertions contained in this response valid?</span></pre></td></tr>
+<tr> <td class="numLine"> 178</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Meaningful only when response status is "success".</span></pre></td></tr>
+<tr> <td class="numLine"> 179</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 180</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> areAssertionsValid() {</pre></td></tr>
+<tr> <td class="numLineCover"> 181</td> <td class="nbHitsCovered"><a title="Line 181: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 181: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> assertion != <span class="keyword">null</span>;</a></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>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 184</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 185</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get the asserted subject.</span></pre></td></tr>
+<tr> <td class="numLine"> 186</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Must satisfy {@link #areAssertionsValid} prior to calling.</span></pre></td></tr>
+<tr> <td class="numLine"> 187</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 188</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> String getSubject() {</pre></td></tr>
+<tr> <td class="numLineCover"> 189</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> assertion.getSubject().getNameID().getValue();</pre></td></tr>
+<tr> <td class="numLine"> 190</td> <td class="nbHits"> </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"> <span class="comment"> * Get the expiration time for the subject verification.</span></pre></td></tr>
+<tr> <td class="numLine"> 194</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Must satisfy {@link #areAssertionsValid} prior to calling.</span></pre></td></tr>
+<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"> 196</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The expiration time, or null if there is none.</span></pre></td></tr>
+<tr> <td class="numLine"> 197</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>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> DateTime getExpirationTime() {</pre></td></tr>
+<tr> <td class="numLineCover"> 199</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> DateTime time1 = assertion.getConditions().getNotOnOrAfter();</pre></td></tr>
+<tr> <td class="numLineCover"> 200</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> List<SubjectConfirmation> confirmations = assertion.getSubject().getSubjectConfirmations();</pre></td></tr>
+<tr> <td class="numLineCover"> 201</td> <td class="nbHitsUncovered"><a title="Line 201: Conditional coverage 50% (1/2)."> 2</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 201: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (confirmations.isEmpty()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 202</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> time1;</span></pre></td></tr>
+<tr> <td class="numLine"> 203</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 204</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> DateTime time2 = Iterables.find(confirmations, bearerPredicate)</pre></td></tr>
+<tr> <td class="numLine"> 205</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .getSubjectConfirmationData()</pre></td></tr>
+<tr> <td class="numLine"> 206</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .getNotOnOrAfter();</pre></td></tr>
+<tr> <td class="numLineCover"> 207</td> <td class="nbHitsUncovered"><a title="Line 207: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> 2</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 207: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> <span class="keyword">return</span> (time1 == <span class="keyword">null</span> || dtComparator.compare(time1, time2) > 0) ? time2 : time1;</a></span></pre></td></tr>
+<tr> <td class="numLine"> 208</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 209</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 210</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 211</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets an exported-state object. This information is a security manager</span></pre></td></tr>
+<tr> <td class="numLine"> 212</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * extension. Must satisfy {@link #areAssertionsValid} prior to calling.</span></pre></td></tr>
+<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 214</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> ExportedState getExportedState() {</pre></td></tr>
+<tr> <td class="numLineCover"> 215</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> getExportedState(assertion);</pre></td></tr>
+<tr> <td class="numLine"> 216</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 217</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 219</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets an exported-state object from a given assertion. This information is</span></pre></td></tr>
+<tr> <td class="numLine"> 220</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * a security manager extension.</span></pre></td></tr>
+<tr> <td class="numLine"> 221</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 222</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param assertion The assertion to get the identities from.</span></pre></td></tr>
+<tr> <td class="numLine"> 223</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return A exported-state object, or {@code null} if there's none.</span></pre></td></tr>
+<tr> <td class="numLine"> 224</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 225</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @VisibleForTesting</pre></td></tr>
+<tr> <td class="numLine"> 226</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> ExportedState getExportedState(Assertion assertion) {</pre></td></tr>
+<tr> <td class="numLineCover"> 227</td> <td class="nbHitsCovered"><a title="Line 227: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 227: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (AttributeStatement attributeStatement : assertion.getAttributeStatements()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 228</td> <td class="nbHitsUncovered"><a title="Line 228: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 228: Conditional coverage 50% (1/2)."> <span class="keyword">for</span> (Attribute attribute : attributeStatement.getAttributes()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 229</td> <td class="nbHitsUncovered"><a title="Line 229: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 229: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (ExportedState.ATTRIBUTE_NAME.equals(attribute.getName())) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 230</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> List<XMLObject> attributeValues = attribute.getAttributeValues();</pre></td></tr>
+<tr> <td class="numLineCover"> 231</td> <td class="nbHitsUncovered"><a title="Line 231: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 231: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (attributeValues.size() == 1) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 232</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> XMLObject attributeValue = attributeValues.get(0);</pre></td></tr>
+<tr> <td class="numLineCover"> 233</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> String textContent = attributeValue.getDOM().getTextContent();</pre></td></tr>
+<tr> <td class="numLineCover"> 234</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> ExportedState.fromJsonString(textContent);</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"> 236</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 237</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 238</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 239</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"> 240</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 241</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 242</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Get any groups that are provided by the assertions.</span></pre></td></tr>
+<tr> <td class="numLine"> 244</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * This information is a security manager extension.</span></pre></td></tr>
+<tr> <td class="numLine"> 245</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Must satisfy {@link #areAssertionsValid} prior to calling.</span></pre></td></tr>
+<tr> <td class="numLine"> 246</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 247</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> ImmutableSet<String> getGroups() {</pre></td></tr>
+<tr> <td class="numLineCover"> 248</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> getGroups(assertion);</span></pre></td></tr>
+<tr> <td class="numLine"> 249</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 250</td> <td class="nbHits"> </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"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 252</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Gets any groups that are provided by a given assertion. This information</span></pre></td></tr>
+<tr> <td class="numLine"> 253</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * is a security manager extension.</span></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"> * @param assertion An assertion to get the groups from.</span></pre></td></tr>
+<tr> <td class="numLine"> 256</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return An immutable set of the groups found; may be empty.</span></pre></td></tr>
+<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 258</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @VisibleForTesting</pre></td></tr>
+<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> ImmutableSet<String> getGroups(Assertion assertion) {</pre></td></tr>
+<tr> <td class="numLineCover"> 260</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> ExportedState state = getExportedState(assertion);</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">return</span> (state != <span class="keyword">null</span>)</a></span></pre></td></tr>
+<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ? state.getPviCredentials().getGroups()</pre></td></tr>
+<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> : ImmutableSet.<String>of();</pre></td></tr>
+<tr> <td class="numLine"> 264</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 266</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// **************** Validation primitives ****************</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"> <span class="keyword">private</span> <span class="keyword">boolean</span> isAssertionValid(Assertion assertion) {</pre></td></tr>
+<tr> <td class="numLineCover"> 269</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> String validityDescription</pre></td></tr>
+<tr> <td class="numLine"> 270</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = <span class="string">"is empty (of statements): "</span> + assertion.getAuthnStatements().isEmpty()</pre></td></tr>
+<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">", assertion issuer: "</span> + assertion.getIssuer()</pre></td></tr>
+<tr> <td class="numLine"> 272</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">", is valid issuer: "</span> + isValidIssuer(assertion.getIssuer())</pre></td></tr>
+<tr> <td class="numLine"> 273</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">", is valid subject: "</span> + isValidSubject(assertion.getSubject())</pre></td></tr>
+<tr> <td class="numLine"> 274</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">", are valid conditions: "</span> + isValidConditions(assertion.getConditions());</pre></td></tr>
+<tr> <td class="numLineCover"> 275</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> inform(validityDescription);</pre></td></tr>
+<tr> <td class="numLine"> 276</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 277</td> <td class="nbHitsUncovered"><a title="Line 277: Conditional coverage 60% (6/10) [each condition: 50%, 50%, 50%, 100%, 50%]."> 4</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 277: Conditional coverage 60% (6/10) [each condition: 50%, 50%, 50%, 100%, 50%]."> <span class="keyword">return</span> !assertion.getAuthnStatements().isEmpty()</a></span></pre></td></tr>
+<tr> <td class="numLine"> 278</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && (assertion.getIssuer() != <span class="keyword">null</span>)</pre></td></tr>
+<tr> <td class="numLine"> 279</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && isValidIssuer(assertion.getIssuer())</pre></td></tr>
+<tr> <td class="numLine"> 280</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && isValidSubject(assertion.getSubject())</pre></td></tr>
+<tr> <td class="numLine"> 281</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && isValidConditions(assertion.getConditions());</pre></td></tr>
+<tr> <td class="numLine"> 282</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 283</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 284</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> isValidIssuer(Issuer issuer) {</pre></td></tr>
+<tr> <td class="numLineCover"> 285</td> <td class="nbHitsUncovered"><a title="Line 285: Conditional coverage 50% (4/8) [each condition: 50%, 0%, 50%, 100%]."> 9</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 285: Conditional coverage 50% (4/8) [each condition: 50%, 0%, 50%, 100%]."> <span class="keyword">return</span> warnIfFalse(issuer.getFormat() == <span class="keyword">null</span> || NameIDType.ENTITY.equals(issuer.getFormat()),</a></span></pre></td></tr>
+<tr> <td class="numLine"> 286</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Issuer contains a format: "</span> + issuer.getFormat() +</pre></td></tr>
+<tr> <td class="numLine"> 287</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">" but is not equal to expected format: "</span> + NameIDType.ENTITY)</pre></td></tr>
+<tr> <td class="numLine"> 288</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && warnIfFalse(client.getPeerEntity().getEntityID().equals(issuer.getValue()),</pre></td></tr>
+<tr> <td class="numLine"> 289</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Issuer value: "</span> + issuer.getValue() + <span class="string">" is not equals to "</span></pre></td></tr>
+<tr> <td class="numLine"> 290</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"expected value: "</span> + client.getPeerEntity().getEntityID());</pre></td></tr>
+<tr> <td class="numLine"> 291</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 292</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 293</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> isValidSubject(Subject subject) {</pre></td></tr>
+<tr> <td class="numLineCover"> 294</td> <td class="nbHitsUncovered"><a title="Line 294: Conditional coverage 62% (5/8) [each condition: 50%, 50%, 50%, 100%]."> 8</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 294: Conditional coverage 62% (5/8) [each condition: 50%, 50%, 50%, 100%]."> <span class="keyword">return</span> warnIfFalse(subject != <span class="keyword">null</span>, <span class="string">"Subject is null."</span>)</a></span></pre></td></tr>
+<tr> <td class="numLine"> 295</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && warnIfFalse(hasValidId(subject), <span class="string">"Subject has an invalid ID."</span>)</pre></td></tr>
+<tr> <td class="numLine"> 296</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && warnIfFalse(areValidSubjectConfirmations(subject.getSubjectConfirmations()),</pre></td></tr>
+<tr> <td class="numLine"> 297</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Subject does not have valid confirmations."</span>);</pre></td></tr>
+<tr> <td class="numLine"> 298</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 299</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 300</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// This is a security manager requirement; it's not mandated by the spec.</span></pre></td></tr>
+<tr> <td class="numLine"> 301</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> hasValidId(Subject subject) {</pre></td></tr>
+<tr> <td class="numLineCover"> 302</td> <td class="nbHitsUncovered"><a title="Line 302: Conditional coverage 50% (8/16) [each condition: 50%, 50%, 50%, 50%, 50%, 50%, 50%, 50%]."> 8</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 302: Conditional coverage 50% (8/16) [each condition: 50%, 50%, 50%, 50%, 50%, 50%, 50%, 50%]."> <span class="keyword">return</span> warnIfFalse(subject.getBaseID() == <span class="keyword">null</span>, <span class="string">"Subject BaseID is not null."</span>)</a></span></pre></td></tr>
+<tr> <td class="numLine"> 303</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && warnIfFalse(subject.getNameID() != <span class="keyword">null</span>, <span class="string">"Subject NameID is null"</span>)</pre></td></tr>
+<tr> <td class="numLine"> 304</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && warnIfFalse(!Strings.isNullOrEmpty(subject.getNameID().getValue()),</pre></td></tr>
+<tr> <td class="numLine"> 305</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Subject NameID string is null or empty."</span>)</pre></td></tr>
+<tr> <td class="numLine"> 306</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && warnIfFalse(subject.getEncryptedID() == <span class="keyword">null</span>, <span class="string">"Subject contains an EncryptedID."</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="numLine"> 308</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 309</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> areValidSubjectConfirmations(List<SubjectConfirmation> confirmations) {</pre></td></tr>
+<tr> <td class="numLineCover"> 310</td> <td class="nbHitsUncovered"><a title="Line 310: Conditional coverage 50% (1/2)."> 8</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 310: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (confirmations.isEmpty()) {</a></span></pre></td></tr>
+<tr> <td class="numLine"> 311</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// This violates the SAML spec, but the GSA has historically ignored this</span></pre></td></tr>
+<tr> <td class="numLine"> 312</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// information, so we must allow it.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 313</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> warn(<span class="string">"SAML assertion received without subject confirmation"</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 314</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">true</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 315</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 316</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> Iterable<SubjectConfirmation> bearers = Iterables.filter(confirmations, bearerPredicate);</pre></td></tr>
+<tr> <td class="numLineCover"> 317</td> <td class="nbHitsUncovered"><a title="Line 317: Conditional coverage 66% (4/6) [each condition: 50%, 50%, 100%]."> 8</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 317: Conditional coverage 66% (4/6) [each condition: 50%, 50%, 100%]."> <span class="keyword">return</span> warnIfFalse(!Iterables.isEmpty(bearers), <span class="string">"SubjectConfirmations contains no bearers."</span>)</a></span></pre></td></tr>
+<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && warnIfFalse(Iterables.all(bearers, validBearerPredicate),</pre></td></tr>
+<tr> <td class="numLine"> 319</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"SubjectConfirmations were invalid."</span>);</pre></td></tr>
+<tr> <td class="numLine"> 320</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 321</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 322</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Predicate<SubjectConfirmation> bearerPredicate =</pre></td></tr>
+<tr> <td class="numLineCover"> 323</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> <span class="keyword">new</span> Predicate<SubjectConfirmation>() {</pre></td></tr>
+<tr> <td class="numLine"> 324</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> apply(SubjectConfirmation confirmation) {</pre></td></tr>
+<tr> <td class="numLineCover"> 325</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> <span class="keyword">return</span> OpenSamlUtil.BEARER_METHOD.equals(confirmation.getMethod());</pre></td></tr>
+<tr> <td class="numLine"> 326</td> <td class="nbHits"> </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"> 328</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 329</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Predicate<SubjectConfirmation> validBearerPredicate =</pre></td></tr>
+<tr> <td class="numLineCover"> 330</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> <span class="keyword">new</span> Predicate<SubjectConfirmation>() {</pre></td></tr>
+<tr> <td class="numLine"> 331</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> apply(SubjectConfirmation bearer) {</pre></td></tr>
+<tr> <td class="numLineCover"> 332</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">return</span> isValidSubjectConfirmationData(bearer.getSubjectConfirmationData());</pre></td></tr>
+<tr> <td class="numLine"> 333</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 334</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> };</pre></td></tr>
+<tr> <td class="numLine"> 335</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 336</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> isValidSubjectConfirmationData(SubjectConfirmationData data) {</pre></td></tr>
+<tr> <td class="numLineCover"> 337</td> <td class="nbHitsUncovered"><a title="Line 337: Conditional coverage 66% (4/6) [each condition: 50%, 50%, 100%]."> 8</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 337: Conditional coverage 66% (4/6) [each condition: 50%, 50%, 100%]."> <span class="keyword">return</span> warnIfFalse(recipient.equals(data.getRecipient()),</a></span></pre></td></tr>
+<tr> <td class="numLine"> 338</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"SubjectConfirmationData - recipient not equals : "</span> + recipient +</pre></td></tr>
+<tr> <td class="numLine"> 339</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"but was instead: "</span> + data.getRecipient())</pre></td></tr>
+<tr> <td class="numLine"> 340</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && warnIfFalse(isValidExpiration(data.getNotOnOrAfter()), <span class="string">"Invalid expiration."</span>)</pre></td></tr>
+<tr> <td class="numLine"> 341</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && warnIfFalse(client.getRequestId().equals((data.getInResponseTo())),</pre></td></tr>
+<tr> <td class="numLine"> 342</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Assertion inResponseTo: "</span> + data.getInResponseTo() +</pre></td></tr>
+<tr> <td class="numLine"> 343</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">" was not equal to this client's RequestID: "</span> + client.getRequestId());</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">private</span> <span class="keyword">boolean</span> isValidExpiration(DateTime expiration) {</pre></td></tr>
+<tr> <td class="numLineCover"> 347</td> <td class="nbHitsUncovered"><a title="Line 347: Conditional coverage 50% (3/6) [each condition: 50%, 50%, 50%]."> 8</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 347: Conditional coverage 50% (3/6) [each condition: 50%, 50%, 50%]."> <span class="keyword">return</span> warnIfFalse(expiration != <span class="keyword">null</span>, <span class="string">"Assertion expiration was null."</span>) &&</a></span></pre></td></tr>
+<tr> <td class="numLine"> 348</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> warnIfFalse(SecurityManagerUtil.isRemoteOnOrAfterTimeValid(expiration.getMillis(), now),</pre></td></tr>
+<tr> <td class="numLine"> 349</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"The assertion's expiration time is invalid."</span>,</pre></td></tr>
+<tr> <td class="numLine"> 350</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Security Manager Current Time: "</span> + <span class="keyword">new</span> DateTime(now).toString(),</pre></td></tr>
+<tr> <td class="numLine"> 351</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Assertion expiration:"</span> + <span class="keyword">new</span> DateTime(expiration.getMillis()).toString());</pre></td></tr>
+<tr> <td class="numLine"> 352</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 353</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 354</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// TODO(cph): This code needs to handle <OneTimeUse> and <ProxyRestriction></span></pre></td></tr>
+<tr> <td class="numLine"> 355</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// conditions.</span></pre></td></tr>
+<tr> <td class="numLine"> 356</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> isValidConditions(Conditions conditions) {</pre></td></tr>
+<tr> <td class="numLineCover"> 357</td> <td class="nbHitsUncovered"><a title="Line 357: Conditional coverage 50% (5/10) [each condition: 50%, 50%, 50%, 50%, 50%]."> 7</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 357: Conditional coverage 50% (5/10) [each condition: 50%, 50%, 50%, 50%, 50%]."> <span class="keyword">return</span> warnIfFalse(conditions != <span class="keyword">null</span>, <span class="string">"Assertion conditions was null."</span>)</a></span></pre></td></tr>
+<tr> <td class="numLine"> 358</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && warnIfFalse(isValidConditionNotBefore(conditions.getNotBefore()),</pre></td></tr>
+<tr> <td class="numLine"> 359</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"ConditionNotBefore is invalid: "</span> + conditions.getNotBefore())</pre></td></tr>
+<tr> <td class="numLine"> 360</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && warnIfFalse(isValidConditionNotOnOrAfter(conditions.getNotOnOrAfter()),</pre></td></tr>
+<tr> <td class="numLine"> 361</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"ConditionNotOnOrAfter is invalid: "</span> + conditions.getNotOnOrAfter())</pre></td></tr>
+<tr> <td class="numLine"> 362</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && warnIfFalse(isValidConditionAudienceRestrictions(conditions.getAudienceRestrictions()),</pre></td></tr>
+<tr> <td class="numLine"> 363</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"ConditionAudienceRestrictions is invalid: "</span> +</pre></td></tr>
+<tr> <td class="numLine"> 364</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> conditions.getAudienceRestrictions());</pre></td></tr>
+<tr> <td class="numLine"> 365</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 366</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 367</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> isValidConditionNotBefore(DateTime notBefore) {</pre></td></tr>
+<tr> <td class="numLineCover"> 368</td> <td class="nbHitsUncovered"><a title="Line 368: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 7</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 368: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">return</span> notBefore == <span class="keyword">null</span> ||</a></span></pre></td></tr>
+<tr> <td class="numLine"> 369</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SecurityManagerUtil.isRemoteBeforeTimeValid(notBefore.getMillis(), now);</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>
+<tr> <td class="numLine"> 372</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> isValidConditionNotOnOrAfter(DateTime notOnOrAfter) {</pre></td></tr>
+<tr> <td class="numLineCover"> 373</td> <td class="nbHitsUncovered"><a title="Line 373: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> 7</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 373: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> <span class="keyword">return</span> notOnOrAfter == <span class="keyword">null</span> ||</a></span></pre></td></tr>
+<tr> <td class="numLine"> 374</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> SecurityManagerUtil.isRemoteOnOrAfterTimeValid(notOnOrAfter.getMillis(), now);</pre></td></tr>
+<tr> <td class="numLine"> 375</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 376</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 377</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> isValidConditionAudienceRestrictions(List<AudienceRestriction> restrictions) {</pre></td></tr>
+<tr> <td class="numLineCover"> 378</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> String localEntityId = client.getLocalEntity().getEntityID();</pre></td></tr>
+<tr> <td class="numLineCover"> 379</td> <td class="nbHitsUncovered"><a title="Line 379: Conditional coverage 50% (1/2)."> 7</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 379: Conditional coverage 50% (1/2)."> <span class="keyword">for</span> (AudienceRestriction restriction : restrictions) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 380</td> <td class="nbHitsUncovered"><a title="Line 380: Conditional coverage 50% (1/2)."> 7</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 380: Conditional coverage 50% (1/2)."> <span class="keyword">for</span> (Audience audience : restriction.getAudiences()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 381</td> <td class="nbHitsUncovered"><a title="Line 381: Conditional coverage 50% (1/2)."> 7</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 381: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (localEntityId.equals(audience.getAudienceURI())) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 382</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</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="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="numLineCover"> 386</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 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>
+</table>
+
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/frame-packages.html b/coverage/frame-packages.html
index df7a0bc..996d074 100644
--- a/coverage/frame-packages.html
+++ b/coverage/frame-packages.html
@@ -24,6 +24,30 @@
<tr>
<td nowrap="nowrap"><a href="frame-summary-com.google.enterprise.adaptor.prebuilt.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html"' target="summary">com.google.enterprise.adaptor.prebuilt</a></td>
</tr>
+<tr>
+<td nowrap="nowrap"><a href="frame-summary-com.google.enterprise.adaptor.secmgr.authncontroller.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.authncontroller.html"' target="summary">com.google.enterprise.adaptor.secmgr.authncontroller</a></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a href="frame-summary-com.google.enterprise.adaptor.secmgr.common.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.common.html"' target="summary">com.google.enterprise.adaptor.secmgr.common</a></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a href="frame-summary-com.google.enterprise.adaptor.secmgr.config.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.config.html"' target="summary">com.google.enterprise.adaptor.secmgr.config</a></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a href="frame-summary-com.google.enterprise.adaptor.secmgr.http.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.http.html"' target="summary">com.google.enterprise.adaptor.secmgr.http</a></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a href="frame-summary-com.google.enterprise.adaptor.secmgr.json.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.json.html"' target="summary">com.google.enterprise.adaptor.secmgr.json</a></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a href="frame-summary-com.google.enterprise.adaptor.secmgr.modules.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.modules.html"' target="summary">com.google.enterprise.adaptor.secmgr.modules</a></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a href="frame-summary-com.google.enterprise.adaptor.secmgr.saml.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.saml.html"' target="summary">com.google.enterprise.adaptor.secmgr.saml</a></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a href="frame-summary-com.google.enterprise.adaptor.secmgr.servlets.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.servlets.html"' target="summary">com.google.enterprise.adaptor.secmgr.servlets</a></td>
+</tr>
</table>
</body>
</html>
diff --git a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.html b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.html
index 5694af3..ae9ac0e 100644
--- a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.html
+++ b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.html
@@ -45,7 +45,10 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.Application.html">Application</a> <i>(79%)</i></td>
</tr>
<tr>
-<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender</a> <i>(96%)</i></td>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.AsyncDocIdPusher.html">AsyncDocIdPusher</a> <i>(N/A)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender</a> <i>(97%)</i></td>
</tr>
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.AuthnAuthority.html">AuthnAuthority</a> <i>(N/A)</i></td>
@@ -198,7 +201,7 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.Principal.html">Principal</a> <i>(98%)</i></td>
</tr>
<tr>
-<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.RedirectHandler.html">RedirectHandler</a> <i>(46%)</i></td>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.RedirectHandler.html">RedirectHandler</a> <i>(23%)</i></td>
</tr>
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.RelativeTimeProvider.html">RelativeTimeProvider</a> <i>(N/A)</i></td>
diff --git a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.authncontroller.html b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.authncontroller.html
new file mode 100644
index 0000000..2a79219
--- /dev/null
+++ b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.authncontroller.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report Classes</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+</head>
+<body>
+<h5>
+com.google.enterprise.adaptor.secmgr.authncontroller
+</h5>
+<div class="separator"> </div>
+<h5>Classes</h5>
+<table width="100%">
+<tbody>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html">ExportedState</a> <i>(58%)</i></td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
diff --git a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.common.html b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.common.html
new file mode 100644
index 0000000..c599938
--- /dev/null
+++ b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.common.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report Classes</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+</head>
+<body>
+<h5>
+com.google.enterprise.adaptor.secmgr.common
+</h5>
+<div class="separator"> </div>
+<h5>Classes</h5>
+<table width="100%">
+<tbody>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.common.AuthzStatus.html">AuthzStatus</a> <i>(0%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.common.SecurityManagerUtil.html">SecurityManagerUtil</a> <i>(57%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.common.Stringify.html">Stringify</a> <i>(0%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.common.XmlUtil.html">XmlUtil</a> <i>(53%)</i></td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
diff --git a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.config.html b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.config.html
new file mode 100644
index 0000000..3d74ed2
--- /dev/null
+++ b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.config.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report Classes</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+</head>
+<body>
+<h5>
+com.google.enterprise.adaptor.secmgr.config
+</h5>
+<div class="separator"> </div>
+<h5>Classes</h5>
+<table width="100%">
+<tbody>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.config.ConfigSingleton.html">ConfigSingleton</a> <i>(41%)</i></td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
diff --git a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.http.html b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.http.html
new file mode 100644
index 0000000..1d5ad46
--- /dev/null
+++ b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.http.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report Classes</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+</head>
+<body>
+<h5>
+com.google.enterprise.adaptor.secmgr.http
+</h5>
+<div class="separator"> </div>
+<h5>Classes</h5>
+<table width="100%">
+<tbody>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.http.HttpClientInterface.html">HttpClientInterface</a> <i>(N/A)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.http.HttpExchange.html">HttpExchange</a> <i>(N/A)</i></td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
diff --git a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.json.html b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.json.html
new file mode 100644
index 0000000..2486f79
--- /dev/null
+++ b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.json.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report Classes</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+</head>
+<body>
+<h5>
+com.google.enterprise.adaptor.secmgr.json
+</h5>
+<div class="separator"> </div>
+<h5>Classes</h5>
+<table width="100%">
+<tbody>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.json.GsonTypes.html">GsonTypes</a> <i>(26%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.json.ProxyTypeAdapter.html">ProxyTypeAdapter</a> <i>(43%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters</a> <i>(38%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.json.TypeProxy.html">TypeProxy</a> <i>(N/A)</i></td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
diff --git a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.modules.html b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.modules.html
new file mode 100644
index 0000000..68bdfc5
--- /dev/null
+++ b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.modules.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report Classes</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+</head>
+<body>
+<h5>
+com.google.enterprise.adaptor.secmgr.modules
+</h5>
+<div class="separator"> </div>
+<h5>Classes</h5>
+<table width="100%">
+<tbody>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.modules.AuthzResult.html">AuthzResult</a> <i>(0%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.modules.SamlClient.html">SamlClient</a> <i>(36%)</i></td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
diff --git a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.saml.html b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.saml.html
new file mode 100644
index 0000000..3ab8d94
--- /dev/null
+++ b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.saml.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report Classes</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+</head>
+<body>
+<h5>
+com.google.enterprise.adaptor.secmgr.saml
+</h5>
+<div class="separator"> </div>
+<h5>Classes</h5>
+<table width="100%">
+<tbody>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.AttributeValue.html">AttributeValue</a> <i>(N/A)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueBuilder.html">AttributeValueBuilder</a> <i>(100%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueImpl.html">AttributeValueImpl</a> <i>(100%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueMarshaller.html">AttributeValueMarshaller</a> <i>(100%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueUnmarshaller.html">AttributeValueUnmarshaller</a> <i>(100%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextDecoder.html">HTTPSOAP11MultiContextDecoder</a> <i>(60%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextEncoder.html">HTTPSOAP11MultiContextEncoder</a> <i>(70%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToInTransport.html">HttpExchangeToInTransport</a> <i>(26%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToOutTransport.html">HttpExchangeToOutTransport</a> <i>(33%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.html">OpenSamlUtil</a> <i>(71%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.SamlLogUtil.html">SamlLogUtil</a> <i>(50%)</i></td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
diff --git a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.servlets.html b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.servlets.html
new file mode 100644
index 0000000..ef8637e
--- /dev/null
+++ b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.secmgr.servlets.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report Classes</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+</head>
+<body>
+<h5>
+com.google.enterprise.adaptor.secmgr.servlets
+</h5>
+<div class="separator"> </div>
+<h5>Classes</h5>
+<table width="100%">
+<tbody>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.servlets.ResponseParser.html">ResponseParser</a> <i>(87%)</i></td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
diff --git a/coverage/frame-sourcefiles.html b/coverage/frame-sourcefiles.html
index 1e73a6a..e1ff3d2 100644
--- a/coverage/frame-sourcefiles.html
+++ b/coverage/frame-sourcefiles.html
@@ -51,7 +51,25 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.Application.html">Application</a> <i>(79%)</i></td>
</tr>
<tr>
-<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender</a> <i>(96%)</i></td>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.AsyncDocIdPusher.html">AsyncDocIdPusher</a> <i>(N/A)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender</a> <i>(97%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.AttributeValue.html">AttributeValue</a> <i>(N/A)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueBuilder.html">AttributeValueBuilder</a> <i>(100%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueImpl.html">AttributeValueImpl</a> <i>(100%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueMarshaller.html">AttributeValueMarshaller</a> <i>(100%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueUnmarshaller.html">AttributeValueUnmarshaller</a> <i>(100%)</i></td>
</tr>
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.AuthnAuthority.html">AuthnAuthority</a> <i>(N/A)</i></td>
@@ -66,9 +84,15 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.AuthzAuthority.html">AuthzAuthority</a> <i>(N/A)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.modules.AuthzResult.html">AuthzResult</a> <i>(0%)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.AuthzStatus.html">AuthzStatus</a> <i>(87%)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.common.AuthzStatus.html">AuthzStatus</a> <i>(0%)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.BlockingQueueBatcher.html">BlockingQueueBatcher</a> <i>(95%)</i></td>
</tr>
<tr>
@@ -96,6 +120,9 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.ConfigModificationListener.html">ConfigModificationListener</a> <i>(N/A)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.config.ConfigSingleton.html">ConfigSingleton</a> <i>(41%)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.CronScheduler.html">CronScheduler</a> <i>(96%)</i></td>
</tr>
<tr>
@@ -147,6 +174,9 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.ExceptionHandlers.html">ExceptionHandlers</a> <i>(83%)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html">ExportedState</a> <i>(58%)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.FakeMap.html">FakeMap</a> <i>(100%)</i></td>
</tr>
<tr>
@@ -177,18 +207,39 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GsaVersion.html">GsaVersion</a> <i>(70%)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.json.GsonTypes.html">GsonTypes</a> <i>(26%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextDecoder.html">HTTPSOAP11MultiContextDecoder</a> <i>(60%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextEncoder.html">HTTPSOAP11MultiContextEncoder</a> <i>(70%)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.HashMapSession.html">HashMapSession</a> <i>(100%)</i></td>
</tr>
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.HttpClientAdapter.html">HttpClientAdapter</a> <i>(2%)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.http.HttpClientInterface.html">HttpClientInterface</a> <i>(N/A)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.http.HttpExchange.html">HttpExchange</a> <i>(N/A)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.HttpExchangeInTransportAdapter.html">HttpExchangeInTransportAdapter</a> <i>(100%)</i></td>
</tr>
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.HttpExchangeOutTransportAdapter.html">HttpExchangeOutTransportAdapter</a> <i>(77%)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToInTransport.html">HttpExchangeToInTransport</a> <i>(26%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToOutTransport.html">HttpExchangeToOutTransport</a> <i>(33%)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.HttpExchanges.html">HttpExchanges</a> <i>(93%)</i></td>
</tr>
<tr>
@@ -222,6 +273,9 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.OneAtATimeRunnable.html">OneAtATimeRunnable</a> <i>(100%)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.html">OpenSamlUtil</a> <i>(71%)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.PollingIncrementalLister.html">PollingIncrementalLister</a> <i>(N/A)</i></td>
</tr>
<tr>
@@ -231,10 +285,13 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.Principal.html">Principal</a> <i>(98%)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.json.ProxyTypeAdapter.html">ProxyTypeAdapter</a> <i>(43%)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.prebuilt.RecursiveFileIterator.html">RecursiveFileIterator</a> <i>(82%)</i></td>
</tr>
<tr>
-<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.RedirectHandler.html">RedirectHandler</a> <i>(46%)</i></td>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.RedirectHandler.html">RedirectHandler</a> <i>(23%)</i></td>
</tr>
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.RelativeTimeProvider.html">RelativeTimeProvider</a> <i>(N/A)</i></td>
@@ -246,6 +303,9 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.Response.html">Response</a> <i>(N/A)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.servlets.ResponseParser.html">ResponseParser</a> <i>(87%)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.ReverseProxyHandler.html">ReverseProxyHandler</a> <i>(82%)</i></td>
</tr>
<tr>
@@ -255,9 +315,15 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.SamlBatchAuthzHandler.html">SamlBatchAuthzHandler</a> <i>(92%)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.modules.SamlClient.html">SamlClient</a> <i>(36%)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.SamlIdentityProvider.html">SamlIdentityProvider</a> <i>(81%)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.saml.SamlLogUtil.html">SamlLogUtil</a> <i>(50%)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.SamlMetadata.html">SamlMetadata</a> <i>(100%)</i></td>
</tr>
<tr>
@@ -267,6 +333,9 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.SecurityManagerConfig.html">SecurityManagerConfig</a> <i>(85%)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.common.SecurityManagerUtil.html">SecurityManagerUtil</a> <i>(57%)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.SensitiveValueCodec.html">SensitiveValueCodec</a> <i>(71%)</i></td>
</tr>
<tr>
@@ -303,6 +372,9 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand</a> <i>(95%)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.common.Stringify.html">Stringify</a> <i>(0%)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.SystemRelativeTimeProvider.html">SystemRelativeTimeProvider</a> <i>(100%)</i></td>
</tr>
<tr>
@@ -321,6 +393,12 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.TranslationStatus.html">TranslationStatus</a> <i>(90%)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters</a> <i>(38%)</i></td>
+</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.json.TypeProxy.html">TypeProxy</a> <i>(N/A)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.UserPrincipal.html">UserPrincipal</a> <i>(100%)</i></td>
</tr>
<tr>
@@ -329,6 +407,9 @@
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor</a> <i>(36%)</i></td>
</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.secmgr.common.XmlUtil.html">XmlUtil</a> <i>(53%)</i></td>
+</tr>
</tbody>
</table>
</body>
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.html b/coverage/frame-summary-com.google.enterprise.adaptor.html
index f296deb..936df10 100644
--- a/coverage/frame-summary-com.google.enterprise.adaptor.html
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.html
@@ -16,10 +16,18 @@
<table class="report" id="packageResults">
<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
<tbody>
- <tr><td><a href="frame-summary-com.google.enterprise.adaptor.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.html"'>com.google.enterprise.adaptor</a></td><td class="value">217</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">872</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:84px"><span class="text">4612/5484</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">325</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:83px"><span class="text">1633/1958</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.585294117647059;</span>2.585</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.html"'>com.google.enterprise.adaptor</a></td><td class="value">218</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">876</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:84px"><span class="text">4623/5499</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">334</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:83px"><span class="text">1638/1972</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.573229873908826;</span>2.573</td></tr>
<tr><td><a href="frame-summary-com.google.enterprise.adaptor.examples.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.examples.html"'>com.google.enterprise.adaptor.examples</a></td><td class="value">8</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">288</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:7px"><span class="text">22/310</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">61</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:10px"><span class="text">7/68</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.5238095238095237;</span>2.524</td></tr>
<tr><td><a href="frame-summary-com.google.enterprise.adaptor.experimental.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.experimental.html"'>com.google.enterprise.adaptor.experimental</a></td><td class="value">8</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">219</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/219</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">77</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/77</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.8;</span>3.8</td></tr>
<tr><td><a href="frame-summary-com.google.enterprise.adaptor.prebuilt.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html"'>com.google.enterprise.adaptor.prebuilt</a></td><td class="value">25</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">145</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:73px"><span class="text">397/542</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">57</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:67px"><span class="text">121/178</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.5934065934065935;</span>2.593</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.authncontroller.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.authncontroller.html"'>com.google.enterprise.adaptor.secmgr.authncontroller</a></td><td class="value">6</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">26</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:58px"><span class="text">37/63</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">15</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:16px"><span class="text">3/18</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.common.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.common.html"'>com.google.enterprise.adaptor.secmgr.common</a></td><td class="value">5</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">80</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:25px"><span class="text">28/108</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">24</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:11px"><span class="text">3/27</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.0357142857142856;</span>2.036</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.config.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.config.html"'>com.google.enterprise.adaptor.secmgr.config</a></td><td class="value">4</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">14</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:41px"><span class="text">10/24</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.http.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.http.html"'>com.google.enterprise.adaptor.secmgr.http</a></td><td class="value">2</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.json.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.json.html"'>com.google.enterprise.adaptor.secmgr.json</a></td><td class="value">15</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">95</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:37px"><span class="text">57/152</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">47</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:12px"><span class="text">7/54</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2857142857142856;</span>2.286</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.modules.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.modules.html"'>com.google.enterprise.adaptor.secmgr.modules</a></td><td class="value">6</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">207</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:26px"><span class="text">76/283</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">58</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:17px"><span class="text">12/70</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.109090909090909;</span>2.109</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.saml.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.saml.html"'>com.google.enterprise.adaptor.secmgr.saml</a></td><td class="value">11</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">155</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:65px"><span class="text">292/447</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">41</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">33/74</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.8076923076923077;</span>1.808</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.servlets.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.servlets.html"'>com.google.enterprise.adaptor.secmgr.servlets</a></td><td class="value">3</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">11</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:87px"><span class="text">75/86</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">50</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:58px"><span class="text">70/120</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.586206896551724;</span>2.586</td></tr>
</tbody>
</table>
<script type="text/javascript">
@@ -71,10 +79,12 @@
<tr><td><a href="com.google.enterprise.adaptor.Application.html">Application$ShutdownHook</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.9130434782608696;</span>2.913</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.Application.html">Application$SuggestHandlerAbortPolicy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">5</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">4/9</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.9130434782608696;</span>2.913</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">18/18</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">8/8</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8;</span>2.8</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8;</span>2.8</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender$ItemPusher</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8;</span>2.8</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender$WorkerRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:92px"><span class="text">13/14</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8;</span>2.8</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdPusher.html">AsyncDocIdPusher</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">24/24</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">8/8</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.125;</span>2.125</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.125;</span>2.125</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender$ItemPusher</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.125;</span>2.125</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.AsyncDocIdSender.html">AsyncDocIdSender$WorkerRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:92px"><span class="text">13/14</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.125;</span>2.125</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.AuthnAuthority.html">AuthnAuthority</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.AuthnAuthority.html">AuthnAuthority$Callback</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
@@ -154,8 +164,8 @@
<tr><td><a href="com.google.enterprise.adaptor.DocIdPusher.html">DocIdPusher$Record</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">31/31</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">26/26</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.5333333333333334;</span>1.533</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.DocIdPusher.html">DocIdPusher$Record$Builder</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">38/38</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.5333333333333334;</span>1.533</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">31</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:81px"><span class="text">139/170</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">12</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:77px"><span class="text">42/54</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.375;</span>4.375</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender$AclItem</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">13/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.375;</span>4.375</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">31</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:81px"><span class="text">139/170</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">12</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:77px"><span class="text">42/54</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.277777777777778;</span>4.278</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.DocIdSender.html">DocIdSender$AclItem</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">20/20</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">8</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:55px"><span class="text">10/18</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.277777777777778;</span>4.278</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.DocumentHandler.html">DocumentHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">8</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:96px"><span class="text">220/228</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:95px"><span class="text">134/140</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.454545454545454;</span>4.455</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.DocumentHandler.html">DocumentHandler$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">1/1</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.454545454545454;</span>4.455</td></tr>
@@ -184,13 +194,13 @@
<tr><td><a href="com.google.enterprise.adaptor.GroupPrincipal.html">GroupPrincipal</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:66px"><span class="text">12/18</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">4/8</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.0;</span>2</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">55</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:81px"><span class="text">239/294</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">24</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:76px"><span class="text">78/102</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.86046511627907;</span>3.86</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.86046511627907;</span>3.86</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AdaptorContextImpl</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">31</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:43px"><span class="text">24/55</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">17</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:22px"><span class="text">5/22</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.86046511627907;</span>3.86</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AlreadyRunningRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.86046511627907;</span>3.86</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$BackgroundRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.86046511627907;</span>3.86</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$IncrementalPushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">7/11</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.86046511627907;</span>3.86</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$PushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:87px"><span class="text">7/8</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.86046511627907;</span>3.86</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">55</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:81px"><span class="text">239/294</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">24</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:76px"><span class="text">78/102</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.7954545454545454;</span>3.795</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.7954545454545454;</span>3.795</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AdaptorContextImpl</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">31</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">25/56</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">17</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:22px"><span class="text">5/22</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.7954545454545454;</span>3.795</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AlreadyRunningRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.7954545454545454;</span>3.795</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$BackgroundRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.7954545454545454;</span>3.795</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$IncrementalPushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">7/11</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.7954545454545454;</span>3.795</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$PushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:87px"><span class="text">7/8</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.7954545454545454;</span>3.795</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.GsaFeedFileMaker.html">GsaFeedFileMaker</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">16</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:90px"><span class="text">152/168</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">48/48</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.8666666666666667;</span>3.867</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.GsaFeedFileMaker.html">GsaFeedFileMaker$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.8666666666666667;</span>3.867</td></tr>
@@ -248,7 +258,7 @@
<tr><td><a href="com.google.enterprise.adaptor.Principal.html">Principal$DomainFormat</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.409090909090909;</span>3.409</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.Principal.html">Principal$ParsedPrincipal</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:97px"><span class="text">44/45</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:97px"><span class="text">48/49</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.409090909090909;</span>3.409</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.RedirectHandler.html">RedirectHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">7</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:46px"><span class="text">6/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">1/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.0;</span>3</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.RedirectHandler.html">RedirectHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">10</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:23px"><span class="text">3/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.0;</span>3</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.RelativeTimeProvider.html">RelativeTimeProvider</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
@@ -334,7 +344,7 @@
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">10</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:23px"><span class="text">3/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$GetContentsRequest</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$GetContentsResponse</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">8</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:85px"><span class="text">46/54</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperAdaptorContext</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">20</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:13px"><span class="text">3/23</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperAdaptorContext</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">21</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:12px"><span class="text">3/24</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperDocIdPusher</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">7</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/7</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperRequest</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.WrapperAdaptor.html">WrapperAdaptor$WrapperResponse</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">34</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/34</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.authncontroller.html b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.authncontroller.html
new file mode 100644
index 0000000..37d4bac
--- /dev/null
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.authncontroller.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<link title="Style" type="text/css" rel="stylesheet" href="css/sortabletable.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+<script type="text/javascript" src="js/sortabletable.js"></script>
+<script type="text/javascript" src="js/customsorttypes.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.authncontroller</h5>
+<div class="separator"> </div>
+<table class="report" id="packageResults">
+<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.authncontroller.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.authncontroller.html"'>com.google.enterprise.adaptor.secmgr.authncontroller</a></td><td class="value">6</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">26</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:58px"><span class="text">37/63</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">15</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:16px"><span class="text">3/18</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+</tbody>
+</table>
+<script type="text/javascript">
+var packageTable = new SortableTable(document.getElementById("packageResults"),
+ ["String", "Number", "Percentage", "Percentage", "FormattedNumber"]);
+packageTable.sort(0);
+</script>
+<div class="separator"> </div>
+<table class="report" id="classResults">
+<thead><tr> <td class="heading">Classes in this Package</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html">ExportedState</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:78px"><span class="text">15/19</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html">ExportedState$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">1/1</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html">ExportedState$2</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">1/1</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html">ExportedState$Credentials</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">9</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:52px"><span class="text">10/19</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">12</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/12</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html">ExportedState$Credentials$LocalProxy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:40px"><span class="text">4/10</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.authncontroller.ExportedState.html">ExportedState$LocalProxy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">7</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:46px"><span class="text">6/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">3/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+
+</tbody>
+</table>
+<script type="text/javascript">
+var classTable = new SortableTable(document.getElementById("classResults"),
+ ["String", "Percentage", "Percentage", "FormattedNumber"]);
+classTable.sort(0);
+</script>
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.common.html b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.common.html
new file mode 100644
index 0000000..0135d46
--- /dev/null
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.common.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<link title="Style" type="text/css" rel="stylesheet" href="css/sortabletable.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+<script type="text/javascript" src="js/sortabletable.js"></script>
+<script type="text/javascript" src="js/customsorttypes.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.common</h5>
+<div class="separator"> </div>
+<table class="report" id="packageResults">
+<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.common.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.common.html"'>com.google.enterprise.adaptor.secmgr.common</a></td><td class="value">5</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">80</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:25px"><span class="text">28/108</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">24</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:11px"><span class="text">3/27</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.0357142857142856;</span>2.036</td></tr>
+</tbody>
+</table>
+<script type="text/javascript">
+var packageTable = new SortableTable(document.getElementById("packageResults"),
+ ["String", "Number", "Percentage", "Percentage", "FormattedNumber"]);
+packageTable.sort(0);
+</script>
+<div class="separator"> </div>
+<table class="report" id="classResults">
+<thead><tr> <td class="heading">Classes in this Package</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.common.AuthzStatus.html">AuthzStatus</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">8</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/8</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.common.SecurityManagerUtil.html">SecurityManagerUtil</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:57px"><span class="text">4/7</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">3/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.4;</span>1.4</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.common.Stringify.html">Stringify</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">46</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/46</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">19</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/19</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.142857142857143;</span>3.143</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.common.Stringify.html">Stringify$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/2</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.142857142857143;</span>3.143</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.common.XmlUtil.html">XmlUtil</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">21</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:53px"><span class="text">24/45</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.8571428571428572;</span>1.857</td></tr>
+
+</tbody>
+</table>
+<script type="text/javascript">
+var classTable = new SortableTable(document.getElementById("classResults"),
+ ["String", "Percentage", "Percentage", "FormattedNumber"]);
+classTable.sort(0);
+</script>
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.config.html b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.config.html
new file mode 100644
index 0000000..46d9b6e
--- /dev/null
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.config.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<link title="Style" type="text/css" rel="stylesheet" href="css/sortabletable.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+<script type="text/javascript" src="js/sortabletable.js"></script>
+<script type="text/javascript" src="js/customsorttypes.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.config</h5>
+<div class="separator"> </div>
+<table class="report" id="packageResults">
+<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.config.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.config.html"'>com.google.enterprise.adaptor.secmgr.config</a></td><td class="value">4</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">14</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:41px"><span class="text">10/24</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+</tbody>
+</table>
+<script type="text/javascript">
+var packageTable = new SortableTable(document.getElementById("packageResults"),
+ ["String", "Number", "Percentage", "Percentage", "FormattedNumber"]);
+packageTable.sort(0);
+</script>
+<div class="separator"> </div>
+<table class="report" id="classResults">
+<thead><tr> <td class="heading">Classes in this Package</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.config.ConfigSingleton.html">ConfigSingleton</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">12</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:42px"><span class="text">9/21</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.config.ConfigSingleton.html">ConfigSingleton$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.config.ConfigSingleton.html">ConfigSingleton$GsonRegistrations</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.config.ConfigSingleton.html">ConfigSingleton$LocalObservable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+</tbody>
+</table>
+<script type="text/javascript">
+var classTable = new SortableTable(document.getElementById("classResults"),
+ ["String", "Percentage", "Percentage", "FormattedNumber"]);
+classTable.sort(0);
+</script>
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.http.html b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.http.html
new file mode 100644
index 0000000..8c864b0
--- /dev/null
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.http.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<link title="Style" type="text/css" rel="stylesheet" href="css/sortabletable.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+<script type="text/javascript" src="js/sortabletable.js"></script>
+<script type="text/javascript" src="js/customsorttypes.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.http</h5>
+<div class="separator"> </div>
+<table class="report" id="packageResults">
+<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.http.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.http.html"'>com.google.enterprise.adaptor.secmgr.http</a></td><td class="value">2</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+</tbody>
+</table>
+<script type="text/javascript">
+var packageTable = new SortableTable(document.getElementById("packageResults"),
+ ["String", "Number", "Percentage", "Percentage", "FormattedNumber"]);
+packageTable.sort(0);
+</script>
+<div class="separator"> </div>
+<table class="report" id="classResults">
+<thead><tr> <td class="heading">Classes in this Package</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.http.HttpClientInterface.html">HttpClientInterface</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.http.HttpExchange.html">HttpExchange</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+</tbody>
+</table>
+<script type="text/javascript">
+var classTable = new SortableTable(document.getElementById("classResults"),
+ ["String", "Percentage", "Percentage", "FormattedNumber"]);
+classTable.sort(0);
+</script>
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.json.html b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.json.html
new file mode 100644
index 0000000..89f6dff
--- /dev/null
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.json.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<link title="Style" type="text/css" rel="stylesheet" href="css/sortabletable.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+<script type="text/javascript" src="js/sortabletable.js"></script>
+<script type="text/javascript" src="js/customsorttypes.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.json</h5>
+<div class="separator"> </div>
+<table class="report" id="packageResults">
+<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.json.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.json.html"'>com.google.enterprise.adaptor.secmgr.json</a></td><td class="value">15</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">95</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:37px"><span class="text">57/152</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">47</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:12px"><span class="text">7/54</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2857142857142856;</span>2.286</td></tr>
+</tbody>
+</table>
+<script type="text/javascript">
+var packageTable = new SortableTable(document.getElementById("packageResults"),
+ ["String", "Number", "Percentage", "Percentage", "FormattedNumber"]);
+packageTable.sort(0);
+</script>
+<div class="separator"> </div>
+<table class="report" id="classResults">
+<thead><tr> <td class="heading">Classes in this Package</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.GsonTypes.html">GsonTypes</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">19</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:26px"><span class="text">7/26</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">17</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:5px"><span class="text">1/18</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.0;</span>4</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.ProxyTypeAdapter.html">ProxyTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">13</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:43px"><span class="text">10/23</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.5714285714285716;</span>2.571</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:53px"><span class="text">7/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$AbstractCollectionTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:91px"><span class="text">11/12</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:62px"><span class="text">5/8</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$AbstractIterableTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">8</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:38px"><span class="text">5/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">8</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/8</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$DispatchTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">17</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/17</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">10</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/10</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$ImmutableListTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:66px"><span class="text">2/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$ImmutableMapTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">15</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:34px"><span class="text">8/23</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:25px"><span class="text">1/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$ImmutableMultisetTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:66px"><span class="text">2/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$ImmutableSetTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">3/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$IterableTypeAdapter</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:25px"><span class="text">2/8</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$IterableTypeAdapter$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">3</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeAdapters.html">TypeAdapters$IterableTypeAdapter$1$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">5</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/5</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.9655172413793103;</span>1.966</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.json.TypeProxy.html">TypeProxy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+</tbody>
+</table>
+<script type="text/javascript">
+var classTable = new SortableTable(document.getElementById("classResults"),
+ ["String", "Percentage", "Percentage", "FormattedNumber"]);
+classTable.sort(0);
+</script>
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.modules.html b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.modules.html
new file mode 100644
index 0000000..a18f151
--- /dev/null
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.modules.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<link title="Style" type="text/css" rel="stylesheet" href="css/sortabletable.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+<script type="text/javascript" src="js/sortabletable.js"></script>
+<script type="text/javascript" src="js/customsorttypes.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.modules</h5>
+<div class="separator"> </div>
+<table class="report" id="packageResults">
+<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.modules.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.modules.html"'>com.google.enterprise.adaptor.secmgr.modules</a></td><td class="value">6</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">207</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:26px"><span class="text">76/283</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">58</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:17px"><span class="text">12/70</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.109090909090909;</span>2.109</td></tr>
+</tbody>
+</table>
+<script type="text/javascript">
+var packageTable = new SortableTable(document.getElementById("packageResults"),
+ ["String", "Number", "Percentage", "Percentage", "FormattedNumber"]);
+packageTable.sort(0);
+</script>
+<div class="separator"> </div>
+<table class="report" id="classResults">
+<thead><tr> <td class="heading">Classes in this Package</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.modules.AuthzResult.html">AuthzResult</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">46</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/46</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.2727272727272727;</span>1.273</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.modules.AuthzResult.html">AuthzResult$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.2727272727272727;</span>1.273</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.modules.AuthzResult.html">AuthzResult$Builder</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">28</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/28</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.2727272727272727;</span>1.273</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.modules.SamlClient.html">SamlClient</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">118</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:37px"><span class="text">70/188</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">41</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:21px"><span class="text">11/52</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.3636363636363638;</span>3.364</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.modules.SamlClient.html">SamlClient$DecodedAuthzResponse</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">4</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/4</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.3636363636363638;</span>3.364</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.modules.SamlClient.html">SamlClient$RedirectEncoder</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">11</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:35px"><span class="text">6/17</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">7</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:12px"><span class="text">1/8</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.3636363636363638;</span>3.364</td></tr>
+
+</tbody>
+</table>
+<script type="text/javascript">
+var classTable = new SortableTable(document.getElementById("classResults"),
+ ["String", "Percentage", "Percentage", "FormattedNumber"]);
+classTable.sort(0);
+</script>
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.saml.html b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.saml.html
new file mode 100644
index 0000000..936b8e1
--- /dev/null
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.saml.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<link title="Style" type="text/css" rel="stylesheet" href="css/sortabletable.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+<script type="text/javascript" src="js/sortabletable.js"></script>
+<script type="text/javascript" src="js/customsorttypes.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.saml</h5>
+<div class="separator"> </div>
+<table class="report" id="packageResults">
+<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.saml.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.saml.html"'>com.google.enterprise.adaptor.secmgr.saml</a></td><td class="value">11</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">155</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:65px"><span class="text">292/447</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">41</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">33/74</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.8076923076923077;</span>1.808</td></tr>
+</tbody>
+</table>
+<script type="text/javascript">
+var packageTable = new SortableTable(document.getElementById("packageResults"),
+ ["String", "Number", "Percentage", "Percentage", "FormattedNumber"]);
+packageTable.sort(0);
+</script>
+<div class="separator"> </div>
+<table class="report" id="classResults">
+<thead><tr> <td class="heading">Classes in this Package</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.AttributeValue.html">AttributeValue</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueBuilder.html">AttributeValueBuilder</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">3/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueImpl.html">AttributeValueImpl</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">9/9</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueMarshaller.html">AttributeValueMarshaller</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">3/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.AttributeValueUnmarshaller.html">AttributeValueUnmarshaller</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">3/3</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextDecoder.html">HTTPSOAP11MultiContextDecoder</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">22</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:60px"><span class="text">33/55</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">19</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:36px"><span class="text">11/30</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5555555555555554;</span>3.556</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.HTTPSOAP11MultiContextEncoder.html">HTTPSOAP11MultiContextEncoder</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">14</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:70px"><span class="text">34/48</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">7</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:41px"><span class="text">5/12</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.142857142857143;</span>3.143</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToInTransport.html">HttpExchangeToInTransport</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">17</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:26px"><span class="text">6/23</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.75;</span>1.75</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.HttpExchangeToOutTransport.html">HttpExchangeToOutTransport</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">22</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">11/33</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.7307692307692308;</span>1.731</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.OpenSamlUtil.html">OpenSamlUtil</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">75</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:71px"><span class="text">185/260</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">14</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:53px"><span class="text">16/30</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.4912280701754386;</span>1.491</td></tr>
+
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.saml.SamlLogUtil.html">SamlLogUtil</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">5</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">5/10</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">1/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5;</span>3.5</td></tr>
+
+</tbody>
+</table>
+<script type="text/javascript">
+var classTable = new SortableTable(document.getElementById("classResults"),
+ ["String", "Percentage", "Percentage", "FormattedNumber"]);
+classTable.sort(0);
+</script>
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.servlets.html b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.servlets.html
new file mode 100644
index 0000000..e713028
--- /dev/null
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.secmgr.servlets.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>Coverage Report</title>
+<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
+<link title="Style" type="text/css" rel="stylesheet" href="css/sortabletable.css"/>
+<script type="text/javascript" src="js/popup.js"></script>
+<script type="text/javascript" src="js/sortabletable.js"></script>
+<script type="text/javascript" src="js/customsorttypes.js"></script>
+</head>
+<body>
+<h5>Coverage Report - com.google.enterprise.adaptor.secmgr.servlets</h5>
+<div class="separator"> </div>
+<table class="report" id="packageResults">
+<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.servlets.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.servlets.html"'>com.google.enterprise.adaptor.secmgr.servlets</a></td><td class="value">3</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">11</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:87px"><span class="text">75/86</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">50</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:58px"><span class="text">70/120</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.586206896551724;</span>2.586</td></tr>
+</tbody>
+</table>
+<script type="text/javascript">
+var packageTable = new SortableTable(document.getElementById("packageResults"),
+ ["String", "Number", "Percentage", "Percentage", "FormattedNumber"]);
+packageTable.sort(0);
+</script>
+<div class="separator"> </div>
+<table class="report" id="classResults">
+<thead><tr> <td class="heading">Classes in this Package</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
+<tbody>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.servlets.ResponseParser.html">ResponseParser</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">11</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:86px"><span class="text">71/82</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">50</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:58px"><span class="text">70/120</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.586206896551724;</span>2.586</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.servlets.ResponseParser.html">ResponseParser$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">2/2</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.586206896551724;</span>2.586</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.secmgr.servlets.ResponseParser.html">ResponseParser$2</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">2/2</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.586206896551724;</span>2.586</td></tr>
+
+</tbody>
+</table>
+<script type="text/javascript">
+var classTable = new SortableTable(document.getElementById("classResults"),
+ ["String", "Percentage", "Percentage", "FormattedNumber"]);
+classTable.sort(0);
+</script>
+<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1.</div>
+</body>
+</html>
diff --git a/coverage/frame-summary.html b/coverage/frame-summary.html
index 9424ab6..c223066 100644
--- a/coverage/frame-summary.html
+++ b/coverage/frame-summary.html
@@ -16,11 +16,19 @@
<table class="report" id="packageResults">
<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
<tbody>
- <tr><td><b>All Packages</b></td><td class="value">258</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1524</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:76px"><span class="text">5031/6555</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">520</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:77px"><span class="text">1761/2281</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.609507640067912;</span>2.61</td></tr>
- <tr><td><a href="frame-summary-com.google.enterprise.adaptor.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.html"'>com.google.enterprise.adaptor</a></td><td class="value">217</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">872</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:84px"><span class="text">4612/5484</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">325</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:83px"><span class="text">1633/1958</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.585294117647059;</span>2.585</td></tr>
+ <tr><td><b>All Packages</b></td><td class="value">311</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2116</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:72px"><span class="text">5617/7733</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">764</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:71px"><span class="text">1894/2658</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.4424083769633507;</span>2.442</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.html"'>com.google.enterprise.adaptor</a></td><td class="value">218</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">876</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:84px"><span class="text">4623/5499</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">334</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:83px"><span class="text">1638/1972</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.573229873908826;</span>2.573</td></tr>
<tr><td><a href="frame-summary-com.google.enterprise.adaptor.examples.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.examples.html"'>com.google.enterprise.adaptor.examples</a></td><td class="value">8</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">288</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:7px"><span class="text">22/310</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">61</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:10px"><span class="text">7/68</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.5238095238095237;</span>2.524</td></tr>
<tr><td><a href="frame-summary-com.google.enterprise.adaptor.experimental.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.experimental.html"'>com.google.enterprise.adaptor.experimental</a></td><td class="value">8</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">219</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/219</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">77</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/77</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.8;</span>3.8</td></tr>
<tr><td><a href="frame-summary-com.google.enterprise.adaptor.prebuilt.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html"'>com.google.enterprise.adaptor.prebuilt</a></td><td class="value">25</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">145</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:73px"><span class="text">397/542</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">57</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:67px"><span class="text">121/178</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.5934065934065935;</span>2.593</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.authncontroller.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.authncontroller.html"'>com.google.enterprise.adaptor.secmgr.authncontroller</a></td><td class="value">6</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">26</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:58px"><span class="text">37/63</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">15</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:16px"><span class="text">3/18</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.3333333333333333;</span>1.333</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.common.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.common.html"'>com.google.enterprise.adaptor.secmgr.common</a></td><td class="value">5</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">80</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:25px"><span class="text">28/108</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">24</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:11px"><span class="text">3/27</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.0357142857142856;</span>2.036</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.config.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.config.html"'>com.google.enterprise.adaptor.secmgr.config</a></td><td class="value">4</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">14</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:41px"><span class="text">10/24</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.http.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.http.html"'>com.google.enterprise.adaptor.secmgr.http</a></td><td class="value">2</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.0;</span>1</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.json.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.json.html"'>com.google.enterprise.adaptor.secmgr.json</a></td><td class="value">15</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">95</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:37px"><span class="text">57/152</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">47</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:12px"><span class="text">7/54</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2857142857142856;</span>2.286</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.modules.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.modules.html"'>com.google.enterprise.adaptor.secmgr.modules</a></td><td class="value">6</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">207</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:26px"><span class="text">76/283</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">58</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:17px"><span class="text">12/70</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.109090909090909;</span>2.109</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.saml.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.saml.html"'>com.google.enterprise.adaptor.secmgr.saml</a></td><td class="value">11</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">155</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:65px"><span class="text">292/447</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">41</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">33/74</span></div></div></td></tr></table></td><td class="value"><span class="hidden">1.8076923076923077;</span>1.808</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.secmgr.servlets.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.secmgr.servlets.html"'>com.google.enterprise.adaptor.secmgr.servlets</a></td><td class="value">3</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">11</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:87px"><span class="text">75/86</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">50</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:58px"><span class="text">70/120</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.586206896551724;</span>2.586</td></tr>
</tbody>
</table>
<script type="text/javascript">
diff --git a/javadoc/allclasses-frame.html b/javadoc/allclasses-frame.html
index a884cf2..440de6a 100644
--- a/javadoc/allclasses-frame.html
+++ b/javadoc/allclasses-frame.html
@@ -19,6 +19,7 @@
<li><a href="com/google/enterprise/adaptor/examples/AdaptorTemplate.html" title="class in com.google.enterprise.adaptor.examples" target="classFrame">AdaptorTemplate</a></li>
<li><a href="com/google/enterprise/adaptor/examples/AdaptorWithCrawlTimeMetadataTemplate.html" title="class in com.google.enterprise.adaptor.examples" target="classFrame">AdaptorWithCrawlTimeMetadataTemplate</a></li>
<li><a href="com/google/enterprise/adaptor/Application.html" title="class in com.google.enterprise.adaptor" target="classFrame">Application</a></li>
+<li><a href="com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor" target="classFrame"><i>AsyncDocIdPusher</i></a></li>
<li><a href="com/google/enterprise/adaptor/AuthnAuthority.html" title="interface in com.google.enterprise.adaptor" target="classFrame"><i>AuthnAuthority</i></a></li>
<li><a href="com/google/enterprise/adaptor/AuthnAuthority.Callback.html" title="interface in com.google.enterprise.adaptor" target="classFrame"><i>AuthnAuthority.Callback</i></a></li>
<li><a href="com/google/enterprise/adaptor/AuthnIdentity.html" title="interface in com.google.enterprise.adaptor" target="classFrame"><i>AuthnIdentity</i></a></li>
diff --git a/javadoc/allclasses-noframe.html b/javadoc/allclasses-noframe.html
index bb462b8..c42e15c 100644
--- a/javadoc/allclasses-noframe.html
+++ b/javadoc/allclasses-noframe.html
@@ -19,6 +19,7 @@
<li><a href="com/google/enterprise/adaptor/examples/AdaptorTemplate.html" title="class in com.google.enterprise.adaptor.examples">AdaptorTemplate</a></li>
<li><a href="com/google/enterprise/adaptor/examples/AdaptorWithCrawlTimeMetadataTemplate.html" title="class in com.google.enterprise.adaptor.examples">AdaptorWithCrawlTimeMetadataTemplate</a></li>
<li><a href="com/google/enterprise/adaptor/Application.html" title="class in com.google.enterprise.adaptor">Application</a></li>
+<li><a href="com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor"><i>AsyncDocIdPusher</i></a></li>
<li><a href="com/google/enterprise/adaptor/AuthnAuthority.html" title="interface in com.google.enterprise.adaptor"><i>AuthnAuthority</i></a></li>
<li><a href="com/google/enterprise/adaptor/AuthnAuthority.Callback.html" title="interface in com.google.enterprise.adaptor"><i>AuthnAuthority.Callback</i></a></li>
<li><a href="com/google/enterprise/adaptor/AuthnIdentity.html" title="interface in com.google.enterprise.adaptor"><i>AuthnIdentity</i></a></li>
diff --git a/javadoc/com/google/enterprise/adaptor/AdaptorContext.html b/javadoc/com/google/enterprise/adaptor/AdaptorContext.html
index 9aa6bbe..709d78b 100644
--- a/javadoc/com/google/enterprise/adaptor/AdaptorContext.html
+++ b/javadoc/com/google/enterprise/adaptor/AdaptorContext.html
@@ -120,76 +120,83 @@
</td>
</tr>
<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor">AsyncDocIdPusher</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html#getAsyncDocIdPusher()">getAsyncDocIdPusher</a></strong>()</code>
+<div class="block">Callback object for asynchronously pushing <code>DocId</code>s to the GSA
+ at any time.</div>
+</td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../com/google/enterprise/adaptor/Config.html" title="class in com.google.enterprise.adaptor">Config</a></code></td>
<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html#getConfig()">getConfig</a></strong>()</code>
<div class="block">Configuration instance for the adaptor and all things within the adaptor
library.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="../../../../com/google/enterprise/adaptor/DocIdEncoder.html" title="interface in com.google.enterprise.adaptor">DocIdEncoder</a></code></td>
<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html#getDocIdEncoder()">getDocIdEncoder</a></strong>()</code>
<div class="block">A way to construct URIs from DocIds.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../com/google/enterprise/adaptor/DocIdPusher.html" title="interface in com.google.enterprise.adaptor">DocIdPusher</a></code></td>
<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html#getDocIdPusher()">getDocIdPusher</a></strong>()</code>
<div class="block">Callback object for pushing <code>DocId</code>s to the GSA at any time.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="../../../../com/google/enterprise/adaptor/ExceptionHandler.html" title="interface in com.google.enterprise.adaptor">ExceptionHandler</a></code></td>
<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html#getGetDocIdsFullErrorHandler()">getGetDocIdsFullErrorHandler</a></strong>()</code>
<div class="block">Retrieve the current <a href="../../../../com/google/enterprise/adaptor/ExceptionHandler.html" title="interface in com.google.enterprise.adaptor"><code>ExceptionHandler</code></a> for full push.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../com/google/enterprise/adaptor/ExceptionHandler.html" title="interface in com.google.enterprise.adaptor">ExceptionHandler</a></code></td>
<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html#getGetDocIdsIncrementalErrorHandler()">getGetDocIdsIncrementalErrorHandler</a></strong>()</code>
<div class="block">Retrieve the current <a href="../../../../com/google/enterprise/adaptor/ExceptionHandler.html" title="interface in com.google.enterprise.adaptor"><code>ExceptionHandler</code></a> for incremental push.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="../../../../com/google/enterprise/adaptor/SensitiveValueDecoder.html" title="interface in com.google.enterprise.adaptor">SensitiveValueDecoder</a></code></td>
<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html#getSensitiveValueDecoder()">getSensitiveValueDecoder</a></strong>()</code>
<div class="block">Retrieve decoder for sensitive values, like passwords.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../com/google/enterprise/adaptor/Session.html" title="interface in com.google.enterprise.adaptor">Session</a></code></td>
<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html#getUserSession(com.sun.net.httpserver.HttpExchange, boolean)">getUserSession</a></strong>(<a href="http://download.oracle.com/javase/6/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/HttpExchange.html?is-external=true" title="class or interface in com.sun.net.httpserver">HttpExchange</a> ex,
boolean create)</code>
<div class="block">Get the session for the user communicating via <code>ex</code>.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html#setAuthnAuthority(com.google.enterprise.adaptor.AuthnAuthority)">setAuthnAuthority</a></strong>(<a href="../../../../com/google/enterprise/adaptor/AuthnAuthority.html" title="interface in com.google.enterprise.adaptor">AuthnAuthority</a> authnAuthority)</code>
<div class="block">Register an authentication provider, so it can authenticate users for the
GSA.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html#setAuthzAuthority(com.google.enterprise.adaptor.AuthzAuthority)">setAuthzAuthority</a></strong>(<a href="../../../../com/google/enterprise/adaptor/AuthzAuthority.html" title="interface in com.google.enterprise.adaptor">AuthzAuthority</a> authzAuthority)</code>
<div class="block">Register an authorization provider, so it can check authorization of users
for the GSA.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html#setGetDocIdsFullErrorHandler(com.google.enterprise.adaptor.ExceptionHandler)">setGetDocIdsFullErrorHandler</a></strong>(<a href="../../../../com/google/enterprise/adaptor/ExceptionHandler.html" title="interface in com.google.enterprise.adaptor">ExceptionHandler</a> handler)</code>
<div class="block">Override the default <a href="../../../../com/google/enterprise/adaptor/ExceptionHandler.html" title="interface in com.google.enterprise.adaptor"><code>ExceptionHandler</code></a> for full push.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html#setGetDocIdsIncrementalErrorHandler(com.google.enterprise.adaptor.ExceptionHandler)">setGetDocIdsIncrementalErrorHandler</a></strong>(<a href="../../../../com/google/enterprise/adaptor/ExceptionHandler.html" title="interface in com.google.enterprise.adaptor">ExceptionHandler</a> handler)</code>
<div class="block">Override the default <a href="../../../../com/google/enterprise/adaptor/ExceptionHandler.html" title="interface in com.google.enterprise.adaptor"><code>ExceptionHandler</code></a> for incremental push.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html#setPollingIncrementalLister(com.google.enterprise.adaptor.PollingIncrementalLister)">setPollingIncrementalLister</a></strong>(<a href="../../../../com/google/enterprise/adaptor/PollingIncrementalLister.html" title="interface in com.google.enterprise.adaptor">PollingIncrementalLister</a> lister)</code>
<div class="block">Register a polling incremental lister, so that it can be called when
@@ -232,6 +239,17 @@
<div class="block">Callback object for pushing <code>DocId</code>s to the GSA at any time.</div>
</li>
</ul>
+<a name="getAsyncDocIdPusher()">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getAsyncDocIdPusher</h4>
+<pre><a href="../../../../com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor">AsyncDocIdPusher</a> getAsyncDocIdPusher()</pre>
+<div class="block">Callback object for asynchronously pushing <code>DocId</code>s to the GSA
+ at any time.</div>
+</li>
+</ul>
<a name="getDocIdEncoder()">
<!-- -->
</a>
diff --git a/javadoc/com/google/enterprise/adaptor/Application.html b/javadoc/com/google/enterprise/adaptor/Application.html
index 3f1c434..1eaaa91 100644
--- a/javadoc/com/google/enterprise/adaptor/Application.html
+++ b/javadoc/com/google/enterprise/adaptor/Application.html
@@ -34,7 +34,7 @@
<div class="subNav">
<ul class="navList">
<li><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html" title="interface in com.google.enterprise.adaptor"><span class="strong">PREV CLASS</span></a></li>
-<li><a href="../../../../com/google/enterprise/adaptor/AuthnAuthority.html" title="interface in com.google.enterprise.adaptor"><span class="strong">NEXT CLASS</span></a></li>
+<li><a href="../../../../com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor"><span class="strong">NEXT CLASS</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?com/google/enterprise/adaptor/Application.html" target="_top">FRAMES</a></li>
@@ -298,7 +298,7 @@
<div class="subNav">
<ul class="navList">
<li><a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html" title="interface in com.google.enterprise.adaptor"><span class="strong">PREV CLASS</span></a></li>
-<li><a href="../../../../com/google/enterprise/adaptor/AuthnAuthority.html" title="interface in com.google.enterprise.adaptor"><span class="strong">NEXT CLASS</span></a></li>
+<li><a href="../../../../com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor"><span class="strong">NEXT CLASS</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?com/google/enterprise/adaptor/Application.html" target="_top">FRAMES</a></li>
diff --git a/javadoc/com/google/enterprise/adaptor/AsyncDocIdPusher.html b/javadoc/com/google/enterprise/adaptor/AsyncDocIdPusher.html
new file mode 100644
index 0000000..5bb3caa
--- /dev/null
+++ b/javadoc/com/google/enterprise/adaptor/AsyncDocIdPusher.html
@@ -0,0 +1,251 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<title>AsyncDocIdPusher</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="AsyncDocIdPusher";
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!-- -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../com/google/enterprise/adaptor/Application.html" title="class in com.google.enterprise.adaptor"><span class="strong">PREV CLASS</span></a></li>
+<li><a href="../../../../com/google/enterprise/adaptor/AuthnAuthority.html" title="interface in com.google.enterprise.adaptor"><span class="strong">NEXT CLASS</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?com/google/enterprise/adaptor/AsyncDocIdPusher.html" target="_top">FRAMES</a></li>
+<li><a href="AsyncDocIdPusher.html" target="_top">NO FRAMES</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>SUMMARY: </li>
+<li>NESTED | </li>
+<li>FIELD | </li>
+<li>CONSTR | </li>
+<li><a href="#method_summary">METHOD</a></li>
+</ul>
+<ul class="subNavList">
+<li>DETAIL: </li>
+<li>FIELD | </li>
+<li>CONSTR | </li>
+<li><a href="#method_detail">METHOD</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<p class="subTitle">com.google.enterprise.adaptor</p>
+<h2 title="Interface AsyncDocIdPusher" class="title">Interface AsyncDocIdPusher</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public interface <strong>AsyncDocIdPusher</strong></pre>
+<div class="block">Interface that allows asynchronous at-will pushing of <code>DocId</code>s
+ to the GSA.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AsyncDocIdPusher.html#pushDocId(com.google.enterprise.adaptor.DocId)">pushDocId</a></strong>(<a href="../../../../com/google/enterprise/adaptor/DocId.html" title="class in com.google.enterprise.adaptor">DocId</a> docId)</code>
+<div class="block">Push a <code>DocId</code> asynchronously to the GSA.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AsyncDocIdPusher.html#pushNamedResource(com.google.enterprise.adaptor.DocId, com.google.enterprise.adaptor.Acl)">pushNamedResource</a></strong>(<a href="../../../../com/google/enterprise/adaptor/DocId.html" title="class in com.google.enterprise.adaptor">DocId</a> docId,
+ <a href="../../../../com/google/enterprise/adaptor/Acl.html" title="class in com.google.enterprise.adaptor">Acl</a> acl)</code>
+<div class="block">Push a named resource asynchronously to the GSA.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../com/google/enterprise/adaptor/AsyncDocIdPusher.html#pushRecord(com.google.enterprise.adaptor.DocIdPusher.Record)">pushRecord</a></strong>(<a href="../../../../com/google/enterprise/adaptor/DocIdPusher.Record.html" title="class in com.google.enterprise.adaptor">DocIdPusher.Record</a> record)</code>
+<div class="block">Push a <code>Record</code> asynchronously to the GSA.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="pushDocId(com.google.enterprise.adaptor.DocId)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>pushDocId</h4>
+<pre>void pushDocId(<a href="../../../../com/google/enterprise/adaptor/DocId.html" title="class in com.google.enterprise.adaptor">DocId</a> docId)</pre>
+<div class="block">Push a <code>DocId</code> asynchronously to the GSA. The <code>DocId</code> is
+ enqueued and sent in the next batch to the GSA. If the queue is full,
+ then the item will be dropped and a warning will be logged.</div>
+</li>
+</ul>
+<a name="pushRecord(com.google.enterprise.adaptor.DocIdPusher.Record)">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>pushRecord</h4>
+<pre>void pushRecord(<a href="../../../../com/google/enterprise/adaptor/DocIdPusher.Record.html" title="class in com.google.enterprise.adaptor">DocIdPusher.Record</a> record)</pre>
+<div class="block">Push a <code>Record</code> asynchronously to the GSA. The <code>Record</code>
+ is enqueued and sent in the next batch to the GSA. If the queue is full,
+ then the item will be dropped and a warning will be logged.</div>
+</li>
+</ul>
+<a name="pushNamedResource(com.google.enterprise.adaptor.DocId, com.google.enterprise.adaptor.Acl)">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>pushNamedResource</h4>
+<pre>void pushNamedResource(<a href="../../../../com/google/enterprise/adaptor/DocId.html" title="class in com.google.enterprise.adaptor">DocId</a> docId,
+ <a href="../../../../com/google/enterprise/adaptor/Acl.html" title="class in com.google.enterprise.adaptor">Acl</a> acl)</pre>
+<div class="block">Push a named resource asynchronously to the GSA. The named resource is
+ enqueued and sent in the next batch to the GSA. If the queue is full,
+ then the item will be dropped and a warning will be logged.
+
+ <p>Named resources are <code>DocId</code>s without any content or metadata,
+ that only exist for ACL inheritance. These <code>DocId</code> will never be
+ visible to the user and have no meaning outside of ACL processing.</div>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!-- -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../com/google/enterprise/adaptor/Application.html" title="class in com.google.enterprise.adaptor"><span class="strong">PREV CLASS</span></a></li>
+<li><a href="../../../../com/google/enterprise/adaptor/AuthnAuthority.html" title="interface in com.google.enterprise.adaptor"><span class="strong">NEXT CLASS</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?com/google/enterprise/adaptor/AsyncDocIdPusher.html" target="_top">FRAMES</a></li>
+<li><a href="AsyncDocIdPusher.html" target="_top">NO FRAMES</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>SUMMARY: </li>
+<li>NESTED | </li>
+<li>FIELD | </li>
+<li>CONSTR | </li>
+<li><a href="#method_summary">METHOD</a></li>
+</ul>
+<ul class="subNavList">
+<li>DETAIL: </li>
+<li>FIELD | </li>
+<li>CONSTR | </li>
+<li><a href="#method_detail">METHOD</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/javadoc/com/google/enterprise/adaptor/AuthnAuthority.html b/javadoc/com/google/enterprise/adaptor/AuthnAuthority.html
index c670074..e8007de 100644
--- a/javadoc/com/google/enterprise/adaptor/AuthnAuthority.html
+++ b/javadoc/com/google/enterprise/adaptor/AuthnAuthority.html
@@ -33,7 +33,7 @@
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../com/google/enterprise/adaptor/Application.html" title="class in com.google.enterprise.adaptor"><span class="strong">PREV CLASS</span></a></li>
+<li><a href="../../../../com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor"><span class="strong">PREV CLASS</span></a></li>
<li><a href="../../../../com/google/enterprise/adaptor/AuthnAuthority.Callback.html" title="interface in com.google.enterprise.adaptor"><span class="strong">NEXT CLASS</span></a></li>
</ul>
<ul class="navList">
@@ -201,7 +201,7 @@
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../com/google/enterprise/adaptor/Application.html" title="class in com.google.enterprise.adaptor"><span class="strong">PREV CLASS</span></a></li>
+<li><a href="../../../../com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor"><span class="strong">PREV CLASS</span></a></li>
<li><a href="../../../../com/google/enterprise/adaptor/AuthnAuthority.Callback.html" title="interface in com.google.enterprise.adaptor"><span class="strong">NEXT CLASS</span></a></li>
</ul>
<ul class="navList">
diff --git a/javadoc/com/google/enterprise/adaptor/package-frame.html b/javadoc/com/google/enterprise/adaptor/package-frame.html
index 8becfb0..a9e3b00 100644
--- a/javadoc/com/google/enterprise/adaptor/package-frame.html
+++ b/javadoc/com/google/enterprise/adaptor/package-frame.html
@@ -13,6 +13,7 @@
<li><a href="Acl.BatchRetriever.html" title="interface in com.google.enterprise.adaptor" target="classFrame"><i>Acl.BatchRetriever</i></a></li>
<li><a href="Adaptor.html" title="interface in com.google.enterprise.adaptor" target="classFrame"><i>Adaptor</i></a></li>
<li><a href="AdaptorContext.html" title="interface in com.google.enterprise.adaptor" target="classFrame"><i>AdaptorContext</i></a></li>
+<li><a href="AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor" target="classFrame"><i>AsyncDocIdPusher</i></a></li>
<li><a href="AuthnAuthority.html" title="interface in com.google.enterprise.adaptor" target="classFrame"><i>AuthnAuthority</i></a></li>
<li><a href="AuthnAuthority.Callback.html" title="interface in com.google.enterprise.adaptor" target="classFrame"><i>AuthnAuthority.Callback</i></a></li>
<li><a href="AuthnIdentity.html" title="interface in com.google.enterprise.adaptor" target="classFrame"><i>AuthnIdentity</i></a></li>
diff --git a/javadoc/com/google/enterprise/adaptor/package-summary.html b/javadoc/com/google/enterprise/adaptor/package-summary.html
index 684f63a..09a1d46 100644
--- a/javadoc/com/google/enterprise/adaptor/package-summary.html
+++ b/javadoc/com/google/enterprise/adaptor/package-summary.html
@@ -96,101 +96,108 @@
</td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor">AsyncDocIdPusher</a></td>
+<td class="colLast">
+<div class="block">Interface that allows asynchronous at-will pushing of <code>DocId</code>s
+ to the GSA.</div>
+</td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/AuthnAuthority.html" title="interface in com.google.enterprise.adaptor">AuthnAuthority</a></td>
<td class="colLast">
<div class="block">Interface for adaptors capable of authenticating users.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/AuthnAuthority.Callback.html" title="interface in com.google.enterprise.adaptor">AuthnAuthority.Callback</a></td>
<td class="colLast">
<div class="block">Interface for replying to <a href="../../../../com/google/enterprise/adaptor/AuthnAuthority.html#authenticateUser(com.sun.net.httpserver.HttpExchange, com.google.enterprise.adaptor.AuthnAuthority.Callback)"><code>AuthnAdaptor.authenticateUser(HttpExchange, Callback)</code></a>.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/AuthnIdentity.html" title="interface in com.google.enterprise.adaptor">AuthnIdentity</a></td>
<td class="colLast">
<div class="block">User identification information for understanding who a user is or if they
are allowed to access a resource.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/AuthzAuthority.html" title="interface in com.google.enterprise.adaptor">AuthzAuthority</a></td>
<td class="colLast">
<div class="block">Interface for adaptors capable of authorizing users.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/DocIdEncoder.html" title="interface in com.google.enterprise.adaptor">DocIdEncoder</a></td>
<td class="colLast">
<div class="block">Allows generating a URI for a particular DocId.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/DocIdPusher.html" title="interface in com.google.enterprise.adaptor">DocIdPusher</a></td>
<td class="colLast">
<div class="block">Interface that allows at-will pushing of <code>DocId</code>s to the GSA.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/DocIdPusher.Item.html" title="interface in com.google.enterprise.adaptor">DocIdPusher.Item</a></td>
<td class="colLast">
<div class="block">Marker interface for an item that can exist in a feed.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/DocumentTransform.html" title="interface in com.google.enterprise.adaptor">DocumentTransform</a></td>
<td class="colLast">
<div class="block">Represents an individual transform in the transform pipeline.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/ExceptionHandler.html" title="interface in com.google.enterprise.adaptor">ExceptionHandler</a></td>
<td class="colLast">
<div class="block">Interface for handling errors and handling retrying policy.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/PollingIncrementalLister.html" title="interface in com.google.enterprise.adaptor">PollingIncrementalLister</a></td>
<td class="colLast">
<div class="block">Interface for library-assisted polling incremental adaptors.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/Request.html" title="interface in com.google.enterprise.adaptor">Request</a></td>
<td class="colLast">
<div class="block">Interface provided to <a href="../../../../com/google/enterprise/adaptor/Adaptor.html#getDocContent(com.google.enterprise.adaptor.Request, com.google.enterprise.adaptor.Response)"><code>Adaptor.getDocContent(Request, Response)</code></a> for describing the action that
should be taken.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/Response.html" title="interface in com.google.enterprise.adaptor">Response</a></td>
<td class="colLast">
<div class="block">Interface provided to <a href="../../../../com/google/enterprise/adaptor/Adaptor.html#getDocContent(com.google.enterprise.adaptor.Request, com.google.enterprise.adaptor.Response)"><code>Adaptor.getDocContent(Request, Response)</code></a> for performing the actions needed
to satisfy a request.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/SensitiveValueDecoder.html" title="interface in com.google.enterprise.adaptor">SensitiveValueDecoder</a></td>
<td class="colLast">
<div class="block">Provides parsing of sensitive values that can be plain text, obfuscated, or
encrypted.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/Session.html" title="interface in com.google.enterprise.adaptor">Session</a></td>
<td class="colLast">
<div class="block">Generic session-state container, but intended for authn bookkeeping.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/Status.html" title="interface in com.google.enterprise.adaptor">Status</a></td>
<td class="colLast">
<div class="block">Multi-state indicator providing the user with a notification of broken parts
of the system.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../com/google/enterprise/adaptor/StatusSource.html" title="interface in com.google.enterprise.adaptor">StatusSource</a></td>
<td class="colLast">
<div class="block">A source of <a href="../../../../com/google/enterprise/adaptor/Status.html" title="interface in com.google.enterprise.adaptor"><code>Status</code></a> messages.</div>
diff --git a/javadoc/com/google/enterprise/adaptor/package-tree.html b/javadoc/com/google/enterprise/adaptor/package-tree.html
index 363b691..2829c25 100644
--- a/javadoc/com/google/enterprise/adaptor/package-tree.html
+++ b/javadoc/com/google/enterprise/adaptor/package-tree.html
@@ -107,6 +107,7 @@
<li type="circle">com.google.enterprise.adaptor.<a href="../../../../com/google/enterprise/adaptor/Acl.BatchRetriever.html" title="interface in com.google.enterprise.adaptor"><span class="strong">Acl.BatchRetriever</span></a></li>
<li type="circle">com.google.enterprise.adaptor.<a href="../../../../com/google/enterprise/adaptor/Adaptor.html" title="interface in com.google.enterprise.adaptor"><span class="strong">Adaptor</span></a></li>
<li type="circle">com.google.enterprise.adaptor.<a href="../../../../com/google/enterprise/adaptor/AdaptorContext.html" title="interface in com.google.enterprise.adaptor"><span class="strong">AdaptorContext</span></a></li>
+<li type="circle">com.google.enterprise.adaptor.<a href="../../../../com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor"><span class="strong">AsyncDocIdPusher</span></a></li>
<li type="circle">com.google.enterprise.adaptor.<a href="../../../../com/google/enterprise/adaptor/AuthnAuthority.html" title="interface in com.google.enterprise.adaptor"><span class="strong">AuthnAuthority</span></a></li>
<li type="circle">com.google.enterprise.adaptor.<a href="../../../../com/google/enterprise/adaptor/AuthnAuthority.Callback.html" title="interface in com.google.enterprise.adaptor"><span class="strong">AuthnAuthority.Callback</span></a></li>
<li type="circle">com.google.enterprise.adaptor.<a href="../../../../com/google/enterprise/adaptor/AuthnIdentity.html" title="interface in com.google.enterprise.adaptor"><span class="strong">AuthnIdentity</span></a></li>
diff --git a/javadoc/index-all.html b/javadoc/index-all.html
index 4fddcc1..4369789 100644
--- a/javadoc/index-all.html
+++ b/javadoc/index-all.html
@@ -145,6 +145,11 @@
</dd>
<dt><span class="strong"><a href="./com/google/enterprise/adaptor/Application.html#Application(com.google.enterprise.adaptor.Adaptor, com.google.enterprise.adaptor.Config)">Application(Adaptor, Config)</a></span> - Constructor for class com.google.enterprise.adaptor.<a href="./com/google/enterprise/adaptor/Application.html" title="class in com.google.enterprise.adaptor">Application</a></dt>
<dd> </dd>
+<dt><a href="./com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor"><span class="strong">AsyncDocIdPusher</span></a> - Interface in <a href="./com/google/enterprise/adaptor/package-summary.html">com.google.enterprise.adaptor</a></dt>
+<dd>
+<div class="block">Interface that allows asynchronous at-will pushing of <code>DocId</code>s
+ to the GSA.</div>
+</dd>
<dt><span class="strong"><a href="./com/google/enterprise/adaptor/AuthnAuthority.html#authenticateUser(com.sun.net.httpserver.HttpExchange, com.google.enterprise.adaptor.AuthnAuthority.Callback)">authenticateUser(HttpExchange, AuthnAuthority.Callback)</a></span> - Method in interface com.google.enterprise.adaptor.<a href="./com/google/enterprise/adaptor/AuthnAuthority.html" title="interface in com.google.enterprise.adaptor">AuthnAuthority</a></dt>
<dd>
<div class="block">Authenticate the user connected via <code>ex</code>.</div>
@@ -487,6 +492,11 @@
<dd>
<div class="block">Gives unmodifiable reference to inserted values for key, empty if none.</div>
</dd>
+<dt><span class="strong"><a href="./com/google/enterprise/adaptor/AdaptorContext.html#getAsyncDocIdPusher()">getAsyncDocIdPusher()</a></span> - Method in interface com.google.enterprise.adaptor.<a href="./com/google/enterprise/adaptor/AdaptorContext.html" title="interface in com.google.enterprise.adaptor">AdaptorContext</a></dt>
+<dd>
+<div class="block">Callback object for asynchronously pushing <code>DocId</code>s to the GSA
+ at any time.</div>
+</dd>
<dt><span class="strong"><a href="./com/google/enterprise/adaptor/Session.html#getAttribute(java.lang.String)">getAttribute(String)</a></span> - Method in interface com.google.enterprise.adaptor.<a href="./com/google/enterprise/adaptor/Session.html" title="interface in com.google.enterprise.adaptor">Session</a></dt>
<dd>
<div class="block">Get attribute value.</div>
@@ -1062,6 +1072,10 @@
<dd>
<div class="block">Represents either a user or a group.</div>
</dd>
+<dt><span class="strong"><a href="./com/google/enterprise/adaptor/AsyncDocIdPusher.html#pushDocId(com.google.enterprise.adaptor.DocId)">pushDocId(DocId)</a></span> - Method in interface com.google.enterprise.adaptor.<a href="./com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor">AsyncDocIdPusher</a></dt>
+<dd>
+<div class="block">Push a <code>DocId</code> asynchronously to the GSA.</div>
+</dd>
<dt><span class="strong"><a href="./com/google/enterprise/adaptor/DocIdPusher.html#pushDocIds(java.lang.Iterable)">pushDocIds(Iterable<DocId>)</a></span> - Method in interface com.google.enterprise.adaptor.<a href="./com/google/enterprise/adaptor/DocIdPusher.html" title="interface in com.google.enterprise.adaptor">DocIdPusher</a></dt>
<dd>
<div class="block">Push <code>DocId</code>s immediately and block until they are successfully
@@ -1082,6 +1096,10 @@
<div class="block">Blocking call to push group definitions to GSA ends in success or
when provided error handler gives up.</div>
</dd>
+<dt><span class="strong"><a href="./com/google/enterprise/adaptor/AsyncDocIdPusher.html#pushNamedResource(com.google.enterprise.adaptor.DocId, com.google.enterprise.adaptor.Acl)">pushNamedResource(DocId, Acl)</a></span> - Method in interface com.google.enterprise.adaptor.<a href="./com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor">AsyncDocIdPusher</a></dt>
+<dd>
+<div class="block">Push a named resource asynchronously to the GSA.</div>
+</dd>
<dt><span class="strong"><a href="./com/google/enterprise/adaptor/DocIdPusher.html#pushNamedResources(java.util.Map)">pushNamedResources(Map<DocId, Acl>)</a></span> - Method in interface com.google.enterprise.adaptor.<a href="./com/google/enterprise/adaptor/DocIdPusher.html" title="interface in com.google.enterprise.adaptor">DocIdPusher</a></dt>
<dd>
<div class="block">Push named resources immediately and block until they are successfully
@@ -1092,6 +1110,10 @@
<div class="block">Push named resources immediately and block until they are successfully
provided to the GSA or the error handler gives up.</div>
</dd>
+<dt><span class="strong"><a href="./com/google/enterprise/adaptor/AsyncDocIdPusher.html#pushRecord(com.google.enterprise.adaptor.DocIdPusher.Record)">pushRecord(DocIdPusher.Record)</a></span> - Method in interface com.google.enterprise.adaptor.<a href="./com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor">AsyncDocIdPusher</a></dt>
+<dd>
+<div class="block">Push a <code>Record</code> asynchronously to the GSA.</div>
+</dd>
<dt><span class="strong"><a href="./com/google/enterprise/adaptor/DocIdPusher.html#pushRecords(java.lang.Iterable)">pushRecords(Iterable<DocIdPusher.Record>)</a></span> - Method in interface com.google.enterprise.adaptor.<a href="./com/google/enterprise/adaptor/DocIdPusher.html" title="interface in com.google.enterprise.adaptor">DocIdPusher</a></dt>
<dd>
<div class="block">Push <code>Record</code>s immediately and block until they are successfully
diff --git a/javadoc/overview-tree.html b/javadoc/overview-tree.html
index a097f66..0540b47 100644
--- a/javadoc/overview-tree.html
+++ b/javadoc/overview-tree.html
@@ -141,6 +141,7 @@
<li type="circle">com.google.enterprise.adaptor.<a href="com/google/enterprise/adaptor/Acl.BatchRetriever.html" title="interface in com.google.enterprise.adaptor"><span class="strong">Acl.BatchRetriever</span></a></li>
<li type="circle">com.google.enterprise.adaptor.<a href="com/google/enterprise/adaptor/Adaptor.html" title="interface in com.google.enterprise.adaptor"><span class="strong">Adaptor</span></a></li>
<li type="circle">com.google.enterprise.adaptor.<a href="com/google/enterprise/adaptor/AdaptorContext.html" title="interface in com.google.enterprise.adaptor"><span class="strong">AdaptorContext</span></a></li>
+<li type="circle">com.google.enterprise.adaptor.<a href="com/google/enterprise/adaptor/AsyncDocIdPusher.html" title="interface in com.google.enterprise.adaptor"><span class="strong">AsyncDocIdPusher</span></a></li>
<li type="circle">com.google.enterprise.adaptor.<a href="com/google/enterprise/adaptor/AuthnAuthority.html" title="interface in com.google.enterprise.adaptor"><span class="strong">AuthnAuthority</span></a></li>
<li type="circle">com.google.enterprise.adaptor.<a href="com/google/enterprise/adaptor/AuthnAuthority.Callback.html" title="interface in com.google.enterprise.adaptor"><span class="strong">AuthnAuthority.Callback</span></a></li>
<li type="circle">com.google.enterprise.adaptor.<a href="com/google/enterprise/adaptor/AuthnIdentity.html" title="interface in com.google.enterprise.adaptor"><span class="strong">AuthnIdentity</span></a></li>