Regeneration from plexi dc1d791
diff --git a/coverage/com.google.enterprise.adaptor.CircularBufferHandler.html b/coverage/com.google.enterprise.adaptor.CircularBufferHandler.html
index 1e0341e..4da260b 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)."> 137</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)."> 135</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"> 137</td> <td class="src"><pre class="src"> buffer[tail] = record;</pre></td></tr>
-<tr> <td class="numLineCover"> 52</td> <td class="nbHitsCovered"> 137</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)."> 137</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"> 135</td> <td class="src"><pre class="src"> buffer[tail] = record;</pre></td></tr>
+<tr> <td class="numLineCover"> 52</td> <td class="nbHitsCovered"> 135</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)."> 135</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"> 137</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 135</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.GroupPrincipal.html b/coverage/com.google.enterprise.adaptor.GroupPrincipal.html
index 9af2215..3e8659c 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"> 768</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"> 766</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.IOHelper.html b/coverage/com.google.enterprise.adaptor.IOHelper.html
index eb98463..47cc5ef 100644
--- a/coverage/com.google.enterprise.adaptor.IOHelper.html
+++ b/coverage/com.google.enterprise.adaptor.IOHelper.html
@@ -83,8 +83,8 @@
<tr> <td class="numLineCover"> 33</td> <td class="nbHitsCovered"> 72</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] buffer = <span class="keyword">new</span> <span class="keyword">byte</span>[1024];</pre></td></tr>
<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">int</span> read;</pre></td></tr>
-<tr> <td class="numLineCover"> 35</td> <td class="nbHitsCovered"><a title="Line 35: Conditional coverage 100% (2/2)."> 177</a></td> <td class="src"><pre class="src"> <a title="Line 35: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> ((read = in.read(buffer)) != -1) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 36</td> <td class="nbHitsCovered"> 106</td> <td class="src"><pre class="src"> out.write(buffer, 0, read);</pre></td></tr>
+<tr> <td class="numLineCover"> 35</td> <td class="nbHitsCovered"><a title="Line 35: Conditional coverage 100% (2/2)."> 208</a></td> <td class="src"><pre class="src"> <a title="Line 35: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> ((read = in.read(buffer)) != -1) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 36</td> <td class="nbHitsCovered"> 137</td> <td class="src"><pre class="src"> out.write(buffer, 0, read);</pre></td></tr>
<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 70</td> <td class="src"><pre class="src"> out.flush();</pre></td></tr>
diff --git a/coverage/com.google.enterprise.adaptor.Journal.html b/coverage/com.google.enterprise.adaptor.Journal.html
index 24eef7a..b0ec7c4 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"> 980</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"> 980</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)."> 410147</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"> 409167</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)."> 392682</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"> 391702</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"> 980</td> <td class="src"><pre class="src"> <span class="keyword">return</span> time - startTime;</pre></td></tr>
diff --git a/coverage/com.google.enterprise.adaptor.Metadata.html b/coverage/com.google.enterprise.adaptor.Metadata.html
index 87ff32c..0851514 100644
--- a/coverage/com.google.enterprise.adaptor.Metadata.html
+++ b/coverage/com.google.enterprise.adaptor.Metadata.html
@@ -91,15 +91,15 @@
<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="numLineCover"> 36</td> <td class="nbHitsCovered"> 43</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> Metadata <span class="keyword">implements</span> Iterable<Entry<String, String>> {</pre></td></tr>
-<tr> <td class="numLineCover"> 37</td> <td class="nbHitsCovered"> 150</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Map<String, Set<String>> mappings </pre></td></tr>
+<tr> <td class="numLineCover"> 37</td> <td class="nbHitsCovered"> 162</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Map<String, Set<String>> mappings </pre></td></tr>
<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> = <span class="keyword">new</span> TreeMap<String, Set<String>>();</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="comment">/** Create empty instance. */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"> 143</td> <td class="src"><pre class="src"> <span class="keyword">public</span> Metadata() {</pre></td></tr>
-<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 143</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"> 155</td> <td class="src"><pre class="src"> <span class="keyword">public</span> Metadata() {</pre></td></tr>
+<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 155</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>
@@ -116,18 +116,18 @@
<td class="src"><pre class="src"> <span class="comment">/** Make v be only value associated with key. */</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> set(String k, String v) {</pre></td></tr>
-<tr> <td class="numLineCover"> 53</td> <td class="nbHitsCovered"><a title="Line 53: Conditional coverage 100% (2/2)."> 106</a></td> <td class="src"><pre class="src"> <a title="Line 53: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == k) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 53</td> <td class="nbHitsCovered"><a title="Line 53: Conditional coverage 100% (2/2)."> 115</a></td> <td class="src"><pre class="src"> <a title="Line 53: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == k) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 54</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"> 55</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"><a title="Line 56: Conditional coverage 100% (2/2)."> 105</a></td> <td class="src"><pre class="src"> <a title="Line 56: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == v) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"><a title="Line 56: Conditional coverage 100% (2/2)."> 114</a></td> <td class="src"><pre class="src"> <a title="Line 56: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == v) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 57</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"> 58</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 59</td> <td class="nbHitsCovered"> 104</td> <td class="src"><pre class="src"> TreeSet<String> single = <span class="keyword">new</span> TreeSet<String>();</pre></td></tr>
-<tr> <td class="numLineCover"> 60</td> <td class="nbHitsCovered"> 104</td> <td class="src"><pre class="src"> single.add(v);</pre></td></tr>
-<tr> <td class="numLineCover"> 61</td> <td class="nbHitsCovered"> 104</td> <td class="src"><pre class="src"> mappings.put(k, single);</pre></td></tr>
-<tr> <td class="numLineCover"> 62</td> <td class="nbHitsCovered"> 104</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 59</td> <td class="nbHitsCovered"> 113</td> <td class="src"><pre class="src"> TreeSet<String> single = <span class="keyword">new</span> TreeSet<String>();</pre></td></tr>
+<tr> <td class="numLineCover"> 60</td> <td class="nbHitsCovered"> 113</td> <td class="src"><pre class="src"> single.add(v);</pre></td></tr>
+<tr> <td class="numLineCover"> 61</td> <td class="nbHitsCovered"> 113</td> <td class="src"><pre class="src"> mappings.put(k, single);</pre></td></tr>
+<tr> <td class="numLineCover"> 62</td> <td class="nbHitsCovered"> 113</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>
@@ -138,61 +138,61 @@
<td class="src"><pre class="src"> <span class="comment">// Can't use items.contains(null) because Set is permitted to throw NPE in</span></pre></td></tr>
<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// such a case.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 68</td> <td class="nbHitsCovered"><a title="Line 68: Conditional coverage 100% (2/2)."> 48</a></td> <td class="src"><pre class="src"> <a title="Line 68: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String s : items) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 69</td> <td class="nbHitsUncovered"><a title="Line 69: Conditional coverage 50% (1/2)."> 69</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 69: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (s == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 68</td> <td class="nbHitsCovered"><a title="Line 68: Conditional coverage 100% (2/2)."> 50</a></td> <td class="src"><pre class="src"> <a title="Line 68: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String s : items) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 69</td> <td class="nbHitsUncovered"><a title="Line 69: Conditional coverage 50% (1/2)."> 72</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 69: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (s == <span class="keyword">null</span>) {</a></span></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> NullPointerException();</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="numLineCover"> 73</td> <td class="nbHitsCovered"> 48</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 73</td> <td class="nbHitsCovered"> 50</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">/** Make copy of v be the values associated with key. */</span></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> set(String k, Set<String> v) {</pre></td></tr>
-<tr> <td class="numLineCover"> 77</td> <td class="nbHitsUncovered"><a title="Line 77: Conditional coverage 50% (1/2)."> 49</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 77: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == k) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 77</td> <td class="nbHitsUncovered"><a title="Line 77: Conditional coverage 50% (1/2)."> 51</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 77: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == k) {</a></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">throw</span> <span class="keyword">new</span> NullPointerException();</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="numLineCover"> 80</td> <td class="nbHitsCovered"><a title="Line 80: Conditional coverage 100% (2/2)."> 49</a></td> <td class="src"><pre class="src"> <a title="Line 80: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == v) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 80</td> <td class="nbHitsCovered"><a title="Line 80: Conditional coverage 100% (2/2)."> 51</a></td> <td class="src"><pre class="src"> <a title="Line 80: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == v) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 81</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"> 82</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"> 48</td> <td class="src"><pre class="src"> assureNoNulls(v);</pre></td></tr>
-<tr> <td class="numLineCover"> 84</td> <td class="nbHitsCovered"><a title="Line 84: Conditional coverage 100% (2/2)."> 48</a></td> <td class="src"><pre class="src"> <a title="Line 84: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (v.isEmpty()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 85</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> mappings.remove(k);</pre></td></tr>
+<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"> 50</td> <td class="src"><pre class="src"> assureNoNulls(v);</pre></td></tr>
+<tr> <td class="numLineCover"> 84</td> <td class="nbHitsCovered"><a title="Line 84: Conditional coverage 100% (2/2)."> 50</a></td> <td class="src"><pre class="src"> <a title="Line 84: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (v.isEmpty()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 85</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> mappings.remove(k);</pre></td></tr>
<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 87</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> v = <span class="keyword">new</span> TreeSet<String>(v);</pre></td></tr>
-<tr> <td class="numLineCover"> 88</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> mappings.put(k, v);</pre></td></tr>
+<tr> <td class="numLineCover"> 87</td> <td class="nbHitsCovered"> 39</td> <td class="src"><pre class="src"> v = <span class="keyword">new</span> TreeSet<String>(v);</pre></td></tr>
+<tr> <td class="numLineCover"> 88</td> <td class="nbHitsCovered"> 39</td> <td class="src"><pre class="src"> mappings.put(k, v);</pre></td></tr>
<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 90</td> <td class="nbHitsCovered"> 48</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 90</td> <td class="nbHitsCovered"> 50</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">/** Increases values mapped to k with v. */</span></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> add(String k, String v) {</pre></td></tr>
-<tr> <td class="numLineCover"> 94</td> <td class="nbHitsCovered"><a title="Line 94: Conditional coverage 100% (2/2)."> 110</a></td> <td class="src"><pre class="src"> <a title="Line 94: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == k) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 94</td> <td class="nbHitsCovered"><a title="Line 94: Conditional coverage 100% (2/2)."> 126</a></td> <td class="src"><pre class="src"> <a title="Line 94: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == k) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 95</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"> 96</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 97</td> <td class="nbHitsCovered"><a title="Line 97: Conditional coverage 100% (2/2)."> 109</a></td> <td class="src"><pre class="src"> <a title="Line 97: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == v) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 97</td> <td class="nbHitsCovered"><a title="Line 97: Conditional coverage 100% (2/2)."> 125</a></td> <td class="src"><pre class="src"> <a title="Line 97: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == v) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 98</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"> 99</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 100</td> <td class="nbHitsCovered"> 107</td> <td class="src"><pre class="src"> Set<String> found = mappings.get(k);</pre></td></tr>
-<tr> <td class="numLineCover"> 101</td> <td class="nbHitsCovered"><a title="Line 101: Conditional coverage 100% (2/2)."> 107</a></td> <td class="src"><pre class="src"> <a title="Line 101: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == found) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 102</td> <td class="nbHitsCovered"> 83</td> <td class="src"><pre class="src"> set(k, v);</pre></td></tr>
+<tr> <td class="numLineCover"> 100</td> <td class="nbHitsCovered"> 123</td> <td class="src"><pre class="src"> Set<String> found = mappings.get(k);</pre></td></tr>
+<tr> <td class="numLineCover"> 101</td> <td class="nbHitsCovered"><a title="Line 101: Conditional coverage 100% (2/2)."> 123</a></td> <td class="src"><pre class="src"> <a title="Line 101: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == found) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 102</td> <td class="nbHitsCovered"> 92</td> <td class="src"><pre class="src"> set(k, v);</pre></td></tr>
<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 104</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> found.add(v);</pre></td></tr>
+<tr> <td class="numLineCover"> 104</td> <td class="nbHitsCovered"> 31</td> <td class="src"><pre class="src"> found.add(v);</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="numLineCover"> 106</td> <td class="nbHitsCovered"> 107</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 106</td> <td class="nbHitsCovered"> 123</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>
@@ -211,12 +211,12 @@
<td class="src"><pre class="src"> <span class="comment">/** Gives unmodifiable reference to inserted values for key, empty if none. */</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> Set<String> getAllValues(String key) {</pre></td></tr>
-<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> Set<String> found = mappings.get(key);</pre></td></tr>
-<tr> <td class="numLineCover"> 119</td> <td class="nbHitsCovered"><a title="Line 119: Conditional coverage 100% (2/2)."> 35</a></td> <td class="src"><pre class="src"> <a title="Line 119: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == found) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> Set<String> found = mappings.get(key);</pre></td></tr>
+<tr> <td class="numLineCover"> 119</td> <td class="nbHitsCovered"><a title="Line 119: Conditional coverage 100% (2/2)."> 37</a></td> <td class="src"><pre class="src"> <a title="Line 119: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">null</span> == found) {</a></pre></td></tr>
<tr> <td class="numLineCover"> 120</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> found = Collections.emptySet(); </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="numLineCover"> 122</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Collections.unmodifiableSet(found);</pre></td></tr>
+<tr> <td class="numLineCover"> 122</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Collections.unmodifiableSet(found);</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>
@@ -338,16 +338,16 @@
<td class="src"><pre class="src"> <span class="comment">/** True if exactly the same key-values are represented. */</span></pre></td></tr>
<tr> <td class="numLine"> 195</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"> 196</td> <td class="nbHitsUncovered"><a title="Line 196: Conditional coverage 50% (1/2)."> 27</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 196: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!(o <span class="keyword">instanceof</span> Metadata)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 196</td> <td class="nbHitsUncovered"><a title="Line 196: Conditional coverage 50% (1/2)."> 31</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 196: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!(o <span class="keyword">instanceof</span> Metadata)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover"> 197</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
<tr> <td class="numLine"> 198</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 199</td> <td class="nbHitsUncovered"><a title="Line 199: Conditional coverage 50% (1/2)."> 27</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 199: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (<span class="keyword">this</span> == o) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 199</td> <td class="nbHitsUncovered"><a title="Line 199: Conditional coverage 50% (1/2)."> 31</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 199: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (<span class="keyword">this</span> == o) {</a></span></pre></td></tr>
<tr> <td class="numLineCover"> 200</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"> 201</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 202</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> Metadata other = (Metadata) o;</pre></td></tr>
-<tr> <td class="numLineCover"> 203</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> <span class="keyword">return</span> mappings.equals(other.mappings);</pre></td></tr>
+<tr> <td class="numLineCover"> 202</td> <td class="nbHitsCovered"> 31</td> <td class="src"><pre class="src"> Metadata other = (Metadata) o;</pre></td></tr>
+<tr> <td class="numLineCover"> 203</td> <td class="nbHitsCovered"> 31</td> <td class="src"><pre class="src"> <span class="keyword">return</span> mappings.equals(other.mappings);</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"> 205</td> <td class="nbHits"> </td>
@@ -384,7 +384,7 @@
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 226</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/** Does not allow any mutating operations. */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 227</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> ReadableMetadata <span class="keyword">extends</span> Metadata {</pre></td></tr>
+<tr> <td class="numLineCover"> 227</td> <td class="nbHitsCovered"> 44</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> ReadableMetadata <span class="keyword">extends</span> Metadata {</pre></td></tr>
<tr> <td class="numLine"> 228</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 229</td> <td class="nbHits"> </td>
@@ -436,13 +436,13 @@
<td class="src"><pre class="src"> <span class="comment">/** Get a reference to an unmodifiable view of this object. */</span></pre></td></tr>
<tr> <td class="numLine"> 255</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> Metadata unmodifiableView() {</pre></td></tr>
-<tr> <td class="numLineCover"> 256</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> Metadata unmodifiable = <span class="keyword">new</span> ReadableMetadata();</pre></td></tr>
+<tr> <td class="numLineCover"> 256</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> Metadata unmodifiable = <span class="keyword">new</span> ReadableMetadata();</pre></td></tr>
<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Extra precaution against mappings use, but not against moding</span></pre></td></tr>
<tr> <td class="numLine"> 258</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// sets that are values inside it.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 259</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> unmodifiable.mappings = Collections.unmodifiableMap(<span class="keyword">this</span>.mappings); </pre></td></tr>
-<tr> <td class="numLineCover"> 260</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> <span class="keyword">return</span> unmodifiable;</pre></td></tr>
+<tr> <td class="numLineCover"> 259</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> unmodifiable.mappings = Collections.unmodifiableMap(<span class="keyword">this</span>.mappings); </pre></td></tr>
+<tr> <td class="numLineCover"> 260</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">return</span> unmodifiable;</pre></td></tr>
<tr> <td class="numLine"> 261</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.Principal.html b/coverage/com.google.enterprise.adaptor.Principal.html
index c87f5e2..767d3fe 100644
--- a/coverage/com.google.enterprise.adaptor.Principal.html
+++ b/coverage/com.google.enterprise.adaptor.Principal.html
@@ -59,7 +59,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"> 495</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"> 500</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>
@@ -162,24 +162,24 @@
<td class="src"><pre class="src"> @Override</pre></td></tr>
<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> compareTo(Principal other) {</pre></td></tr>
-<tr> <td class="numLineCover"> 85</td> <td class="nbHitsCovered"> 495</td> <td class="src"><pre class="src"> <span class="keyword">int</span> spacecmp = namespace.compareTo(other.namespace);</pre></td></tr>
-<tr> <td class="numLineCover"> 86</td> <td class="nbHitsCovered"><a title="Line 86: Conditional coverage 100% (2/2)."> 495</a></td> <td class="src"><pre class="src"> <a title="Line 86: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (0 != spacecmp) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 87</td> <td class="nbHitsCovered"> 53</td> <td class="src"><pre class="src"> <span class="keyword">return</span> spacecmp;</pre></td></tr>
+<tr> <td class="numLineCover"> 85</td> <td class="nbHitsCovered"> 500</td> <td class="src"><pre class="src"> <span class="keyword">int</span> spacecmp = namespace.compareTo(other.namespace);</pre></td></tr>
+<tr> <td class="numLineCover"> 86</td> <td class="nbHitsCovered"><a title="Line 86: Conditional coverage 100% (2/2)."> 500</a></td> <td class="src"><pre class="src"> <a title="Line 86: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (0 != spacecmp) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 87</td> <td class="nbHitsCovered"> 51</td> <td class="src"><pre class="src"> <span class="keyword">return</span> spacecmp;</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="comment">// OK, same namespace</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"><a title="Line 91: Conditional coverage 100% (2/2)."> 442</a></td> <td class="src"><pre class="src"> <a title="Line 91: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (isUser() != other.isUser()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 92</td> <td class="nbHitsCovered"><a title="Line 92: Conditional coverage 100% (2/2)."> 47</a></td> <td class="src"><pre class="src"> <a title="Line 92: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> isUser() ? -1 : 1;</a></pre></td></tr>
+<tr> <td class="numLineCover"> 91</td> <td class="nbHitsCovered"><a title="Line 91: Conditional coverage 100% (2/2)."> 449</a></td> <td class="src"><pre class="src"> <a title="Line 91: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (isUser() != other.isUser()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 92</td> <td class="nbHitsCovered"><a title="Line 92: Conditional coverage 100% (2/2)."> 50</a></td> <td class="src"><pre class="src"> <a title="Line 92: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> isUser() ? -1 : 1;</a></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">// OK, same namespace and same type</span></pre></td></tr>
<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 96</td> <td class="nbHitsCovered"> 395</td> <td class="src"><pre class="src"> <span class="keyword">return</span> name.compareTo(other.name);</pre></td></tr>
+<tr> <td class="numLineCover"> 96</td> <td class="nbHitsCovered"> 399</td> <td class="src"><pre class="src"> <span class="keyword">return</span> name.compareTo(other.name);</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>
diff --git a/coverage/com.google.enterprise.adaptor.SystemTimeProvider.html b/coverage/com.google.enterprise.adaptor.SystemTimeProvider.html
index 483d5ce..1799411 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"> 71</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"> 408610</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"> 391145</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.UserPrincipal.html b/coverage/com.google.enterprise.adaptor.UserPrincipal.html
index f14e97d..c653bf2 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"> 1118</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"> 1137</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.examples.MetadataTransformExample.html b/coverage/com.google.enterprise.adaptor.examples.MetadataTransformExample.html
new file mode 100644
index 0000000..2233b69
--- /dev/null
+++ b/coverage/com.google.enterprise.adaptor.examples.MetadataTransformExample.html
@@ -0,0 +1,157 @@
+<!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.examples.MetadataTransformExample</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.examples.MetadataTransformExample.html">MetadataTransformExample</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:88px"><span class="text">22/25</span></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:70px"><span class="text">7/10</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.4;</span>2.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 2013 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.examples;</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.DocumentTransform;</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.adaptor.Metadata;</pre></td></tr>
+<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.*;</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.util.logging.*;</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"> * Example transform which will move values from one key to another.</span></pre></td></tr>
+<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <p></span></pre></td></tr>
+<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * For example the values under key "creator" could be moved to </span></pre></td></tr>
+<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * be under the key "author".</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> MetadataTransformExample <span class="keyword">implements</span> DocumentTransform {</pre></td></tr>
+<tr> <td class="numLineCover"> 30</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"> 31</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = Logger.getLogger(MetadataTransformExample.<span class="keyword">class</span>.getName());</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 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> String dest;</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="numLineCover"> 35</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">private</span> MetadataTransformExample(String originalKey, String changedKey) {</pre></td></tr>
+<tr> <td class="numLineCover"> 36</td> <td class="nbHitsUncovered"><a title="Line 36: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 2</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 36: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (<span class="keyword">null</span> == originalKey || <span class="keyword">null</span> == changedKey) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 37</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"> 38</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 39</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.src = originalKey;</pre></td></tr>
+<tr> <td class="numLineCover"> 40</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.dest = changedKey;</pre></td></tr>
+<tr> <td class="numLineCover"> 41</td> <td class="nbHitsCovered"><a title="Line 41: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 41: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (src.equals(dest)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 42</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"original and destination key the same: {0}"</span>, 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="numLineCover"> 44</td> <td class="nbHitsCovered"> 2</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="comment">/** Makes transform from config with "src" and "dest" keys. */</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">static</span> MetadataTransformExample create(Map<String, String> cfg) {</pre></td></tr>
+<tr> <td class="numLineCover"> 48</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> MetadataTransformExample(cfg.get(<span class="string">"src"</span>), cfg.get(<span class="string">"dest"</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"> @Override</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> transform(Metadata metadata, Map<String, String> params) {</pre></td></tr>
+<tr> <td class="numLineCover"> 53</td> <td class="nbHitsCovered"><a title="Line 53: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 53: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (src.equals(dest)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 54</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</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"> 1</td> <td class="src"><pre class="src"> Set<String> valuesToMove = metadata.getAllValues(src);</pre></td></tr>
+<tr> <td class="numLineCover"> 57</td> <td class="nbHitsUncovered"><a title="Line 57: Conditional coverage 50% (1/2)."> 1</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> (valuesToMove.isEmpty()) {</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"> log.log(Level.FINE, <span class="string">"no values for {0}. Skipping"</span>, src);</span></pre></td></tr>
+<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 60</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"moving values from {0} to {1}: {2}"</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[] {src, dest, valuesToMove});</pre></td></tr>
+<tr> <td class="numLineCover"> 62</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Set<String> valuesAlreadyThere = metadata.getAllValues(dest);</pre></td></tr>
+<tr> <td class="numLineCover"> 63</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> metadata.set(dest, combine(valuesToMove, valuesAlreadyThere));</pre></td></tr>
+<tr> <td class="numLineCover"> 64</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.FINER, <span class="string">"deleting source {0}"</span>, src);</pre></td></tr>
+<tr> <td class="numLineCover"> 65</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> metadata.set(src, Collections.<String>emptySet());</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"> 1</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">private</span> Set<String> combine(Set<String> s1, Set<String> s2) {</pre></td></tr>
+<tr> <td class="numLineCover"> 70</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> Set<String> combined = <span class="keyword">new</span> HashSet<String>(s1);</pre></td></tr>
+<tr> <td class="numLineCover"> 71</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> combined.addAll(s2);</pre></td></tr>
+<tr> <td class="numLineCover"> 72</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> combined;</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">public</span> String toString() {</pre></td></tr>
+<tr> <td class="numLineCover"> 77</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="string">"MetadataTransformExample(src="</span> + src + <span class="string">",dest="</span> + dest + <span class="string">")"</span>;</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>
+</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.prebuilt.PrebuiltTransforms.html b/coverage/com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html
index 2d966a5..74ea876 100644
--- a/coverage/com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html
+++ b/coverage/com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html
@@ -12,12 +12,12 @@
<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.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms</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:98px"><span class="text">80/81</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">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 class="value"><span class="hidden">2.8421052631578947;</span>2.842</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$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.8421052631578947;</span>2.842</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$CopyTransform</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">10/10</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8421052631578947;</span>2.842</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$DeleteTransform</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">7/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">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 class="value"><span class="hidden">2.8421052631578947;</span>2.842</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$KeyPairing</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:75px"><span class="text">6/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:50px"><span class="text">2/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8421052631578947;</span>2.842</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$ReplaceTransform</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.8421052631578947;</span>2.842</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms</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:98px"><span class="text">83/84</span></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">40/40</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8947368421052633;</span>2.895</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$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.8947368421052633;</span>2.895</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$CopyTransform</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">10/10</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8947368421052633;</span>2.895</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$DeleteTransform</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">7/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">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 class="value"><span class="hidden">2.8947368421052633;</span>2.895</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$KeyPairing</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:75px"><span class="text">6/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:50px"><span class="text">2/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8947368421052633;</span>2.895</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$ReplaceTransform</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.8947368421052633;</span>2.895</td></tr>
</table>
<div class="separator"> </div>
@@ -124,13 +124,13 @@
<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="keyword">public</span> <span class="keyword">static</span> DocumentTransform copyMetadata(Map<String, String> config) {</pre></td></tr>
-<tr> <td class="numLineCover"> 54</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> overwrite = Boolean.parseBoolean(config.get(<span class="string">"overwrite"</span>));</pre></td></tr>
-<tr> <td class="numLineCover"> 55</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> List<KeyPairing> copies = parseCopies(config);</pre></td></tr>
-<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"><a title="Line 56: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 56: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (copies.isEmpty()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 57</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.warning(<span class="string">"No entries listed to be copied"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 54</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> overwrite = Boolean.parseBoolean(config.get(<span class="string">"overwrite"</span>));</pre></td></tr>
+<tr> <td class="numLineCover"> 55</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> List<KeyPairing> copies = parseCopies(config);</pre></td></tr>
+<tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"><a title="Line 56: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 56: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (copies.isEmpty()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 57</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.warning(<span class="string">"No entries listed to be copied"</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="numLineCover"> 59</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> CopyTransform(copies, overwrite, <span class="keyword">false</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 59</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> CopyTransform(copies, overwrite, <span class="keyword">false</span>);</pre></td></tr>
<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
@@ -149,13 +149,13 @@
<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> <span class="keyword">static</span> DocumentTransform moveMetadata(Map<String, String> config) {</pre></td></tr>
-<tr> <td class="numLineCover"> 69</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> overwrite = Boolean.parseBoolean(config.get(<span class="string">"overwrite"</span>));</pre></td></tr>
-<tr> <td class="numLineCover"> 70</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> List<KeyPairing> copies = parseCopies(config);</pre></td></tr>
-<tr> <td class="numLineCover"> 71</td> <td class="nbHitsCovered"><a title="Line 71: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 71: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (copies.isEmpty()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 72</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.warning(<span class="string">"No entries listed to be moved"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 69</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> overwrite = Boolean.parseBoolean(config.get(<span class="string">"overwrite"</span>));</pre></td></tr>
+<tr> <td class="numLineCover"> 70</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> List<KeyPairing> copies = parseCopies(config);</pre></td></tr>
+<tr> <td class="numLineCover"> 71</td> <td class="nbHitsCovered"><a title="Line 71: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 71: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (copies.isEmpty()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 72</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.warning(<span class="string">"No entries listed to be moved"</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="numLineCover"> 74</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> CopyTransform(copies, overwrite, <span class="keyword">true</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 74</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> CopyTransform(copies, overwrite, <span class="keyword">true</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>
@@ -170,425 +170,432 @@
<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">private</span> <span class="keyword">static</span> List<KeyPairing> parseCopies(Map<String, String> config) {</pre></td></tr>
-<tr> <td class="numLineCover"> 82</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> Map<Integer, Map<String, String>> allSubs = parseOrderedMaps(config);</pre></td></tr>
-<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> List<KeyPairing> copies = <span class="keyword">new</span> ArrayList<KeyPairing>(allSubs.size());</pre></td></tr>
-<tr> <td class="numLineCover"> 84</td> <td class="nbHitsCovered"><a title="Line 84: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 84: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map.Entry<Integer, Map<String, String>> instruction : allSubs.entrySet()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 85</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> String from = instruction.getValue().get(<span class="string">"from"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 86</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> String to = instruction.getValue().get(<span class="string">"to"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 87</td> <td class="nbHitsCovered"><a title="Line 87: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 87: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (from == <span class="keyword">null</span> || to == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 88</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Ignoring int {0}. Missing .from or .to"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 82</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> Map<Integer, Map<String, String>> allSubs = parseOrderedMaps(config);</pre></td></tr>
+<tr> <td class="numLineCover"> 83</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> List<KeyPairing> copies = <span class="keyword">new</span> ArrayList<KeyPairing>(allSubs.size());</pre></td></tr>
+<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">for</span> (Map.Entry<Integer, Map<String, String>> instruction</pre></td></tr>
+<tr> <td class="numLineCover"> 85</td> <td class="nbHitsCovered"><a title="Line 85: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 85: Conditional coverage 100% (2/2)."> : allSubs.entrySet()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 86</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> String from = instruction.getValue().get(<span class="string">"from"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 87</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> String to = instruction.getValue().get(<span class="string">"to"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 88</td> <td class="nbHitsCovered"><a title="Line 88: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 12</a></td> <td class="src"><pre class="src"> <a title="Line 88: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (from == <span class="keyword">null</span> || to == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 89</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Ignoring int {0}. Missing .from or .to"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> instruction.getKey());</pre></td></tr>
-<tr> <td class="numLineCover"> 90</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
-<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 91</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</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="numLineCover"> 92</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> KeyPairing kp = <span class="keyword">new</span> KeyPairing(from, to);</pre></td></tr>
-<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> copies.add(kp);</pre></td></tr>
-<tr> <td class="numLineCover"> 94</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Found config to rename {0} to {1}"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {from, to});</pre></td></tr>
-<tr> <td class="numLineCover"> 96</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 97</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> copies;</pre></td></tr>
-<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 93</td> <td class="nbHitsCovered"><a title="Line 93: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 93: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (from.equals(to)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 94</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"removing no-op: {0}"</span>, from);</pre></td></tr>
+<tr> <td class="numLineCover"> 95</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</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"> 8</td> <td class="src"><pre class="src"> KeyPairing kp = <span class="keyword">new</span> KeyPairing(from, to);</pre></td></tr>
+<tr> <td class="numLineCover"> 98</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> copies.add(kp);</pre></td></tr>
+<tr> <td class="numLineCover"> 99</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Found config to rename {0} to {1}"</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="comment"> * Splits configurations that start with number and period into</span></pre></td></tr>
-<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * their own maps.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {from, to});</pre></td></tr>
+<tr> <td class="numLineCover"> 101</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 102</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> copies;</pre></td></tr>
<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * <p></span></pre></td></tr>
-<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * For example we get all configuration items that are like "12.BLAH"</span></pre></td></tr>
-<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * (some integer followed by a dot and more text). The inner map's keys</span></pre></td></tr>
-<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * are the text strings that follow the dot (so "BLAH" would be a key in </span></pre></td></tr>
-<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * this case).</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"> <span class="keyword">private</span> <span class="keyword">static</span> Map<Integer, Map<String, String>></pre></td></tr>
-<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> parseOrderedMaps(Map<String, String> config) {</pre></td></tr>
-<tr> <td class="numLineCover"> 111</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> Map<Integer, Map<String, String>> numberedConfigs</pre></td></tr>
-<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> = <span class="keyword">new</span> TreeMap<Integer, Map<String, String>>();</pre></td></tr>
-<tr> <td class="numLineCover"> 113</td> <td class="nbHitsCovered"><a title="Line 113: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 113: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map.Entry<String, String> me : config.entrySet()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 114</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> String[] parts = me.getKey().split(<span class="string">"\\."</span>, 2);</pre></td></tr>
-<tr> <td class="numLineCover"> 115</td> <td class="nbHitsCovered"><a title="Line 115: Conditional coverage 100% (2/2)."> 21</a></td> <td class="src"><pre class="src"> <a title="Line 115: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (parts.length != 2) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 116</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.FINER,</pre></td></tr>
-<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"Not a copy definition. Does not contain a dot: {0}"</span>, me.getKey());</pre></td></tr>
-<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">continue</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="numLineCover"> 120</td> <td class="nbHitsCovered"><a title="Line 120: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 120: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!INTEGER_PATTERN.matcher(parts[0]).matches()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 121</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.FINER,</pre></td></tr>
-<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"Not a copy definition. Does not start with an integer: {0}"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> me.getKey());</pre></td></tr>
-<tr> <td class="numLineCover"> 124</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</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="numLineCover"> 126</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> <span class="keyword">int</span> i = Integer.parseInt(parts[0]);</pre></td></tr>
-<tr> <td class="numLineCover"> 127</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> Map<String, String> values = numberedConfigs.get(i);</pre></td></tr>
-<tr> <td class="numLineCover"> 128</td> <td class="nbHitsCovered"><a title="Line 128: Conditional coverage 100% (2/2)."> 18</a></td> <td class="src"><pre class="src"> <a title="Line 128: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (values == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 129</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> values = <span class="keyword">new</span> HashMap<String, String>();</pre></td></tr>
-<tr> <td class="numLineCover"> 130</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> numberedConfigs.put(i, values);</pre></td></tr>
-<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 132</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> values.put(parts[1], me.getValue());</pre></td></tr>
-<tr> <td class="numLineCover"> 133</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 134</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> numberedConfigs;</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>
+<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 137</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> CopyTransform <span class="keyword">implements</span> DocumentTransform {</pre></td></tr>
-<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> List<KeyPairing> copies;</pre></td></tr>
-<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">boolean</span> overwrite;</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"> * Splits configurations that start with number and period into</span></pre></td></tr>
+<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * their own maps.</span></pre></td></tr>
+<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <p></span></pre></td></tr>
+<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * For example we get all configuration items that are like "12.BLAH"</span></pre></td></tr>
+<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * (some integer followed by a dot and more text). The inner map's keys</span></pre></td></tr>
+<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * are the text strings that follow the dot (so "BLAH" would be a key in </span></pre></td></tr>
+<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * this case).</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">static</span> Map<Integer, Map<String, String>></pre></td></tr>
+<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> parseOrderedMaps(Map<String, String> config) {</pre></td></tr>
+<tr> <td class="numLineCover"> 116</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> Map<Integer, Map<String, String>> numberedConfigs</pre></td></tr>
+<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = <span class="keyword">new</span> TreeMap<Integer, Map<String, String>>();</pre></td></tr>
+<tr> <td class="numLineCover"> 118</td> <td class="nbHitsCovered"><a title="Line 118: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 118: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map.Entry<String, String> me : config.entrySet()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 119</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> String[] parts = me.getKey().split(<span class="string">"\\."</span>, 2);</pre></td></tr>
+<tr> <td class="numLineCover"> 120</td> <td class="nbHitsCovered"><a title="Line 120: Conditional coverage 100% (2/2)."> 25</a></td> <td class="src"><pre class="src"> <a title="Line 120: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (parts.length != 2) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 121</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.FINER,</pre></td></tr>
+<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Not a copy definition. Does not contain a dot: {0}"</span>, me.getKey());</pre></td></tr>
+<tr> <td class="numLineCover"> 123</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">continue</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="numLineCover"> 125</td> <td class="nbHitsCovered"><a title="Line 125: Conditional coverage 100% (2/2)."> 24</a></td> <td class="src"><pre class="src"> <a title="Line 125: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!INTEGER_PATTERN.matcher(parts[0]).matches()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 126</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.FINER,</pre></td></tr>
+<tr> <td class="numLine"> 127</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Not a copy definition. Does not start with an integer: {0}"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> me.getKey());</pre></td></tr>
+<tr> <td class="numLineCover"> 129</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</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="numLineCover"> 131</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">int</span> i = Integer.parseInt(parts[0]);</pre></td></tr>
+<tr> <td class="numLineCover"> 132</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> Map<String, String> values = numberedConfigs.get(i);</pre></td></tr>
+<tr> <td class="numLineCover"> 133</td> <td class="nbHitsCovered"><a title="Line 133: Conditional coverage 100% (2/2)."> 22</a></td> <td class="src"><pre class="src"> <a title="Line 133: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (values == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 134</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> values = <span class="keyword">new</span> HashMap<String, String>();</pre></td></tr>
+<tr> <td class="numLineCover"> 135</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> numberedConfigs.put(i, values);</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"> 22</td> <td class="src"><pre class="src"> values.put(parts[1], me.getValue());</pre></td></tr>
+<tr> <td class="numLineCover"> 138</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 139</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> numberedConfigs;</pre></td></tr>
<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">boolean</span> move;</pre></td></tr>
+ <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>
-<tr> <td class="numLine"> 142</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> CopyTransform(List<KeyPairing> copies, <span class="keyword">boolean</span> overwrite,</pre></td></tr>
-<tr> <td class="numLineCover"> 143</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> move) {</pre></td></tr>
-<tr> <td class="numLineCover"> 144</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.copies = Collections.unmodifiableList(</pre></td></tr>
+<tr> <td class="numLineCover"> 142</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> CopyTransform <span class="keyword">implements</span> DocumentTransform {</pre></td></tr>
+<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> List<KeyPairing> copies;</pre></td></tr>
+<tr> <td class="numLine"> 144</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">boolean</span> overwrite;</pre></td></tr>
<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> ArrayList<KeyPairing>(copies));</pre></td></tr>
-<tr> <td class="numLineCover"> 146</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.overwrite = overwrite;</pre></td></tr>
-<tr> <td class="numLineCover"> 147</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.move = move;</pre></td></tr>
-<tr> <td class="numLineCover"> 148</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 149</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">boolean</span> move;</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="keyword">private</span> CopyTransform(List<KeyPairing> copies, <span class="keyword">boolean</span> overwrite,</pre></td></tr>
+<tr> <td class="numLineCover"> 148</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> move) {</pre></td></tr>
+<tr> <td class="numLineCover"> 149</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.copies = Collections.unmodifiableList(</pre></td></tr>
<tr> <td class="numLine"> 150</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> ArrayList<KeyPairing>(copies));</pre></td></tr>
+<tr> <td class="numLineCover"> 151</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.overwrite = overwrite;</pre></td></tr>
+<tr> <td class="numLineCover"> 152</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.move = move;</pre></td></tr>
+<tr> <td class="numLineCover"> 153</td> <td class="nbHitsCovered"> 6</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"> 151</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 156</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> transform(Metadata metadata, Map<String, String> params) {</pre></td></tr>
-<tr> <td class="numLineCover"> 152</td> <td class="nbHitsCovered"><a title="Line 152: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 152: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (KeyPairing kp : copies) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 153</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> Set<String> values = metadata.getAllValues(kp.src);</pre></td></tr>
-<tr> <td class="numLineCover"> 154</td> <td class="nbHitsCovered"><a title="Line 154: Conditional coverage 100% (2/2)."> 8</a></td> <td class="src"><pre class="src"> <a title="Line 154: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (values.isEmpty()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 155</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"No values for {0}. Skipping"</span>, kp.src);</pre></td></tr>
-<tr> <td class="numLineCover"> 156</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
-<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 157</td> <td class="nbHitsCovered"><a title="Line 157: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 157: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (KeyPairing kp : copies) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 158</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> Set<String> values = metadata.getAllValues(kp.src);</pre></td></tr>
+<tr> <td class="numLineCover"> 159</td> <td class="nbHitsCovered"><a title="Line 159: Conditional coverage 100% (2/2)."> 8</a></td> <td class="src"><pre class="src"> <a title="Line 159: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (values.isEmpty()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 160</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"No values for {0}. Skipping"</span>, kp.src);</pre></td></tr>
+<tr> <td class="numLineCover"> 161</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
+<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 158</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Copying values from {0} to {1}: {2}"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {kp.src, kp.dest, values});</pre></td></tr>
-<tr> <td class="numLineCover"> 160</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> Set<String> destValues = metadata.getAllValues(kp.dest);</pre></td></tr>
-<tr> <td class="numLineCover"> 161</td> <td class="nbHitsCovered"><a title="Line 161: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 161: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (!overwrite && !destValues.isEmpty()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 162</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> values = <span class="keyword">new</span> HashSet<String>(values);</pre></td></tr>
-<tr> <td class="numLineCover"> 163</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.FINER, <span class="string">"Preexisting values for {0}. Combining: {1}"</span>,</pre></td></tr>
+<tr> <td class="numLineCover"> 163</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Copying values from {0} to {1}: {2}"</span>,</pre></td></tr>
<tr> <td class="numLine"> 164</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {kp.src, kp.dest, values});</pre></td></tr>
+<tr> <td class="numLineCover"> 165</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> Set<String> destValues = metadata.getAllValues(kp.dest);</pre></td></tr>
+<tr> <td class="numLineCover"> 166</td> <td class="nbHitsCovered"><a title="Line 166: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 166: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (!overwrite && !destValues.isEmpty()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 167</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> values = <span class="keyword">new</span> HashSet<String>(values);</pre></td></tr>
+<tr> <td class="numLineCover"> 168</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.FINER, <span class="string">"Preexisting values for {0}. Combining: {1}"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 169</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {kp.dest, destValues});</pre></td></tr>
-<tr> <td class="numLineCover"> 165</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> values.addAll(destValues);</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="numLineCover"> 167</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> metadata.set(kp.dest, values);</pre></td></tr>
-<tr> <td class="numLineCover"> 168</td> <td class="nbHitsCovered"><a title="Line 168: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 168: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (move) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 169</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> log.log(Level.FINER, <span class="string">"Deleting source {0}"</span>, kp.src);</pre></td></tr>
-<tr> <td class="numLineCover"> 170</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> metadata.set(kp.src, Collections.<String>emptySet());</pre></td></tr>
+<tr> <td class="numLineCover"> 170</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> values.addAll(destValues);</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="numLineCover"> 172</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 173</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 174</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLineCover"> 172</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> metadata.set(kp.dest, values);</pre></td></tr>
+<tr> <td class="numLineCover"> 173</td> <td class="nbHitsCovered"><a title="Line 173: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 173: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (move) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 174</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> log.log(Level.FINER, <span class="string">"Deleting source {0}"</span>, kp.src);</pre></td></tr>
+<tr> <td class="numLineCover"> 175</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> metadata.set(kp.src, Collections.<String>emptySet());</pre></td></tr>
<tr> <td class="numLine"> 176</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"> 177</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="string">"CopyTransform(copies="</span> + copies + <span class="string">",overwrite="</span> + overwrite</pre></td></tr>
-<tr> <td class="numLine"> 178</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">",move="</span> + move + <span class="string">")"</span>;</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 177</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 178</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</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="comment">/** Contains source and destination metadata key. */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 183</td> <td class="nbHitsCovered"> 41</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> KeyPairing {</pre></td></tr>
+<tr> <td class="numLine"> 180</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 181</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"> 182</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="string">"CopyTransform(copies="</span> + copies + <span class="string">",overwrite="</span> + overwrite</pre></td></tr>
+<tr> <td class="numLine"> 183</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">",move="</span> + move + <span class="string">")"</span>;</pre></td></tr>
<tr> <td class="numLine"> 184</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> String src;</pre></td></tr>
+ <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">private</span> <span class="keyword">final</span> String dest;</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 186</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 187</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> KeyPairing(String from, String to) {</pre></td></tr>
-<tr> <td class="numLineCover"> 188</td> <td class="nbHitsUncovered"><a title="Line 188: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 8</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 188: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (<span class="keyword">null</span> == from || <span class="keyword">null</span> == to) {</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> NullPointerException();</span></pre></td></tr>
+<tr> <td class="numLine"> 187</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/** Contains source and destination metadata key. */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 188</td> <td class="nbHitsCovered"> 41</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> KeyPairing {</pre></td></tr>
+<tr> <td class="numLine"> 189</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> String src;</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="numLineCover"> 191</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> src = from;</pre></td></tr>
-<tr> <td class="numLineCover"> 192</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> dest = to;</pre></td></tr>
-<tr> <td class="numLineCover"> 193</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 194</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> String dest;</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="numLineCover"> 192</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> KeyPairing(String from, String to) {</pre></td></tr>
+<tr> <td class="numLineCover"> 193</td> <td class="nbHitsUncovered"><a title="Line 193: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 8</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 193: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (<span class="keyword">null</span> == from || <span class="keyword">null</span> == to) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 194</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</span></pre></td></tr>
<tr> <td class="numLine"> 195</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"> 196</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="string">"KeyPairing(from="</span> + src + <span class="string">",to="</span> + dest + <span class="string">")"</span>;</span></pre></td></tr>
-<tr> <td class="numLine"> 197</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 198</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> } </pre></td></tr>
+<tr> <td class="numLineCover"> 196</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> src = from;</pre></td></tr>
+<tr> <td class="numLineCover"> 197</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> dest = to;</pre></td></tr>
+<tr> <td class="numLineCover"> 198</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</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">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 201</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Returns a transform that deletes metadata keys. The keys to be deleted are</span></pre></td></tr>
-<tr> <td class="numLine"> 202</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * defined by {@code "keyX"} configuration entries (where {@code X} is an</span></pre></td></tr>
-<tr> <td class="numLine"> 203</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * integer).</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"> * <p>Example configuration:</span></pre></td></tr>
-<tr> <td class="numLine"> 206</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * <pre><code>key2=sensitive</span></pre></td></tr>
-<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *key4=unhelpful</code></pre></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> DocumentTransform deleteMetadata(Map<String, String> config) {</pre></td></tr>
-<tr> <td class="numLineCover"> 210</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> Set<String> keys = <span class="keyword">new</span> HashSet<String>(parseList(config, <span class="string">"key"</span>));</pre></td></tr>
-<tr> <td class="numLineCover"> 211</td> <td class="nbHitsCovered"><a title="Line 211: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 211: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (keys.isEmpty()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 212</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.warning(<span class="string">"No entries listed to delete"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 214</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> DeleteTransform(keys);</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>
-<tr> <td class="numLine"> 217</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> List<String> parseList(Map<String, String> config,</pre></td></tr>
-<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> String prefix) {</pre></td></tr>
-<tr> <td class="numLineCover"> 219</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> List<String> keys = <span class="keyword">new</span> LinkedList<String>();</pre></td></tr>
-<tr> <td class="numLineCover"> 220</td> <td class="nbHitsCovered"><a title="Line 220: Conditional coverage 100% (2/2)."> 5</a></td> <td class="src"><pre class="src"> <a title="Line 220: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map.Entry<String, String> me : config.entrySet()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 221</td> <td class="nbHitsCovered"><a title="Line 221: Conditional coverage 100% (2/2)."> 16</a></td> <td class="src"><pre class="src"> <a title="Line 221: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!me.getKey().startsWith(prefix)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 222</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
-<tr> <td class="numLine"> 223</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 224</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> String number = me.getKey().substring(prefix.length());</pre></td></tr>
-<tr> <td class="numLineCover"> 225</td> <td class="nbHitsCovered"><a title="Line 225: Conditional coverage 100% (2/2)."> 9</a></td> <td class="src"><pre class="src"> <a title="Line 225: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!INTEGER_PATTERN.matcher(number).matches()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 226</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Ignoring {0}. Number does not follow .{1}"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {me.getKey(), prefix});</pre></td></tr>
-<tr> <td class="numLineCover"> 228</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</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="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> keys.add(me.getValue());</pre></td></tr>
-<tr> <td class="numLineCover"> 231</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 232</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">return</span> keys;</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"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> DeleteTransform <span class="keyword">implements</span> DocumentTransform {</pre></td></tr>
-<tr> <td class="numLine"> 236</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> List<String> keys;</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="numLineCover"> 238</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">public</span> DeleteTransform(Collection<String> keys) {</pre></td></tr>
-<tr> <td class="numLineCover"> 239</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.keys = Collections.unmodifiableList(<span class="keyword">new</span> ArrayList<String>(keys));</pre></td></tr>
-<tr> <td class="numLineCover"> 240</td> <td class="nbHitsCovered"> 2</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"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> transform(Metadata metadata, Map<String, String> params) {</pre></td></tr>
-<tr> <td class="numLineCover"> 244</td> <td class="nbHitsCovered"><a title="Line 244: Conditional coverage 100% (2/2)."> 1</a></td> <td class="src"><pre class="src"> <a title="Line 244: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String key : keys) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 245</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> metadata.set(key, Collections.<String>emptySet());</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"> 1</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"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 250</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"> 251</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="string">"DeleteTransform(keys="</span> + keys + <span class="string">")"</span>;</pre></td></tr>
-<tr> <td class="numLine"> 252</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 201</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="string">"KeyPairing(from="</span> + src + <span class="string">",to="</span> + dest + <span class="string">")"</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 202</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 253</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 203</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 254</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 204</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 255</td> <td class="nbHits"> </td>
+<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"> 256</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Returns a transform that preforms string replacements within metadata</span></pre></td></tr>
-<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * values. The keys to have replacements done on their values are defined by</span></pre></td></tr>
-<tr> <td class="numLine"> 258</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * {@code "keyX"} configuration entries (where {@code X} is an</span></pre></td></tr>
-<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * integer). The {@code "overwrite"} configuration key can be set to {@code</span></pre></td></tr>
-<tr> <td class="numLine"> 260</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * "false"} to cause the original string to be left intact; otherwise the</span></pre></td></tr>
-<tr> <td class="numLine"> 261</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * original string is replaced.</span></pre></td></tr>
-<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 206</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Returns a transform that deletes metadata keys. The keys to be deleted are</span></pre></td></tr>
+<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * defined by {@code "keyX"} configuration entries (where {@code X} is an</span></pre></td></tr>
+<tr> <td class="numLine"> 208</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * integer).</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"> 263</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * <p>The needle to be found is configured via a {@code "string"} or {@code</span></pre></td></tr>
-<tr> <td class="numLine"> 264</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * "pattern"} configuration key. {@code string}'s value is treated as a</span></pre></td></tr>
-<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * literal string to be found whereas {@code pattern}'s value is treated as</span></pre></td></tr>
-<tr> <td class="numLine"> 266</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * a regular expression. The replacement is defined by {@code "replacement"}</span></pre></td></tr>
-<tr> <td class="numLine"> 267</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * and is interpreted as a literal string if {@code "string"} was provided</span></pre></td></tr>
-<tr> <td class="numLine"> 268</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * and a regular expression replacement if {@code "pattern"} was provided.</span></pre></td></tr>
-<tr> <td class="numLine"> 269</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
-<tr> <td class="numLine"> 270</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 210</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> * <p>Example configuration:</span></pre></td></tr>
-<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * <pre><code>overwrite=false</span></pre></td></tr>
-<tr> <td class="numLine"> 272</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *key1=favorite</span></pre></td></tr>
-<tr> <td class="numLine"> 273</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *key5=least favorite</span></pre></td></tr>
-<tr> <td class="numLine"> 274</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *pattern=(Java|C|Perl)</span></pre></td></tr>
-<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *replacement=$1 (but it should be x86 assembler)</code</pre></span></pre></td></tr>
-<tr> <td class="numLine"> 276</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 211</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <pre><code>key2=sensitive</span></pre></td></tr>
+<tr> <td class="numLine"> 212</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *key4=unhelpful</code></pre></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"> 277</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> DocumentTransform replaceMetadata(Map<String, String> config) {</pre></td></tr>
-<tr> <td class="numLineCover"> 278</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> overwrite = <span class="keyword">true</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 279</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String overwriteString = config.get(<span class="string">"overwrite"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 280</td> <td class="nbHitsCovered"><a title="Line 280: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 280: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (overwriteString != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 281</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> overwrite = Boolean.parseBoolean(overwriteString);</pre></td></tr>
-<tr> <td class="numLine"> 282</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 214</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> DocumentTransform deleteMetadata(Map<String, String> config) {</pre></td></tr>
+<tr> <td class="numLineCover"> 215</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> Set<String> keys = <span class="keyword">new</span> HashSet<String>(parseList(config, <span class="string">"key"</span>));</pre></td></tr>
+<tr> <td class="numLineCover"> 216</td> <td class="nbHitsCovered"><a title="Line 216: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 216: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (keys.isEmpty()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 217</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.warning(<span class="string">"No entries listed to delete"</span>);</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"> 283</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String string = config.get(<span class="string">"string"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 284</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String pattern = config.get(<span class="string">"pattern"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 285</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String replacement = config.get(<span class="string">"replacement"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 286</td> <td class="nbHitsCovered"><a title="Line 286: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 286: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (replacement == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 287</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">"Missing replacement"</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"> Pattern toMatch;</pre></td></tr>
-<tr> <td class="numLine"> 290</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> String replacementPattern;</pre></td></tr>
-<tr> <td class="numLineCover"> 291</td> <td class="nbHitsCovered"><a title="Line 291: Conditional coverage 100% (2/2)."> 5</a></td> <td class="src"><pre class="src"> <a title="Line 291: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (string != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 292</td> <td class="nbHitsCovered"><a title="Line 292: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 292: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (pattern != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 293</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(</pre></td></tr>
-<tr> <td class="numLine"> 294</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"Using both string and pattern is not permitted"</span>);</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="numLineCover"> 296</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> toMatch = Pattern.compile(Pattern.quote(string));</pre></td></tr>
-<tr> <td class="numLineCover"> 297</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> replacementPattern = Matcher.quoteReplacement(replacement);</pre></td></tr>
-<tr> <td class="numLineCover"> 298</td> <td class="nbHitsCovered"><a title="Line 298: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 298: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (pattern != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 299</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> toMatch = Pattern.compile(pattern);</pre></td></tr>
-<tr> <td class="numLineCover"> 300</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> replacementPattern = replacement;</pre></td></tr>
-<tr> <td class="numLine"> 301</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 302</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(</pre></td></tr>
-<tr> <td class="numLine"> 303</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"Neither string or pattern is defined"</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>
+<tr> <td class="numLineCover"> 219</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> DeleteTransform(keys);</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"> 221</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 306</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> Set<String> keys = <span class="keyword">new</span> HashSet<String>(parseList(config, <span class="string">"key"</span>));</pre></td></tr>
-<tr> <td class="numLineCover"> 307</td> <td class="nbHitsCovered"><a title="Line 307: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 307: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (keys.isEmpty()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 308</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.warning(<span class="string">"No entries listed to replace"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 222</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> List<String> parseList(Map<String, String> config,</pre></td></tr>
+<tr> <td class="numLine"> 223</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String prefix) {</pre></td></tr>
+<tr> <td class="numLineCover"> 224</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> List<String> keys = <span class="keyword">new</span> LinkedList<String>();</pre></td></tr>
+<tr> <td class="numLineCover"> 225</td> <td class="nbHitsCovered"><a title="Line 225: Conditional coverage 100% (2/2)."> 5</a></td> <td class="src"><pre class="src"> <a title="Line 225: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map.Entry<String, String> me : config.entrySet()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 226</td> <td class="nbHitsCovered"><a title="Line 226: Conditional coverage 100% (2/2)."> 16</a></td> <td class="src"><pre class="src"> <a title="Line 226: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!me.getKey().startsWith(prefix)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 227</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
+<tr> <td class="numLine"> 228</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 229</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> String number = me.getKey().substring(prefix.length());</pre></td></tr>
+<tr> <td class="numLineCover"> 230</td> <td class="nbHitsCovered"><a title="Line 230: Conditional coverage 100% (2/2)."> 9</a></td> <td class="src"><pre class="src"> <a title="Line 230: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!INTEGER_PATTERN.matcher(number).matches()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 231</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Ignoring {0}. Number does not follow .{1}"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 232</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {me.getKey(), prefix});</pre></td></tr>
+<tr> <td class="numLineCover"> 233</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</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"> 235</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> keys.add(me.getValue());</pre></td></tr>
+<tr> <td class="numLineCover"> 236</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 237</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">return</span> keys;</pre></td></tr>
+<tr> <td class="numLine"> 238</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 239</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> DeleteTransform <span class="keyword">implements</span> DocumentTransform {</pre></td></tr>
+<tr> <td class="numLine"> 241</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> List<String> keys;</pre></td></tr>
+<tr> <td class="numLine"> 242</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 243</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">public</span> DeleteTransform(Collection<String> keys) {</pre></td></tr>
+<tr> <td class="numLineCover"> 244</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.keys = Collections.unmodifiableList(<span class="keyword">new</span> ArrayList<String>(keys));</pre></td></tr>
+<tr> <td class="numLineCover"> 245</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</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"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 248</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> transform(Metadata metadata, Map<String, String> params) {</pre></td></tr>
+<tr> <td class="numLineCover"> 249</td> <td class="nbHitsCovered"><a title="Line 249: Conditional coverage 100% (2/2)."> 1</a></td> <td class="src"><pre class="src"> <a title="Line 249: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String key : keys) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 250</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> metadata.set(key, Collections.<String>emptySet());</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="numLineCover"> 252</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 253</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 254</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 255</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"> 256</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="string">"DeleteTransform(keys="</span> + keys + <span class="string">")"</span>;</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"> }</pre></td></tr>
+<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="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"> * Returns a transform that preforms string replacements within metadata</span></pre></td></tr>
+<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * values. The keys to have replacements done on their values are defined by</span></pre></td></tr>
+<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * {@code "keyX"} configuration entries (where {@code X} is an</span></pre></td></tr>
+<tr> <td class="numLine"> 264</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * integer). The {@code "overwrite"} configuration key can be set to {@code</span></pre></td></tr>
+<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * "false"} to cause the original string to be left intact; otherwise the</span></pre></td></tr>
+<tr> <td class="numLine"> 266</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * original string is replaced.</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="comment"> * <p>The needle to be found is configured via a {@code "string"} or {@code</span></pre></td></tr>
+<tr> <td class="numLine"> 269</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * "pattern"} configuration key. {@code string}'s value is treated as a</span></pre></td></tr>
+<tr> <td class="numLine"> 270</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * literal string to be found whereas {@code pattern}'s value is treated as</span></pre></td></tr>
+<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * a regular expression. The replacement is defined by {@code "replacement"}</span></pre></td></tr>
+<tr> <td class="numLine"> 272</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * and is interpreted as a literal string if {@code "string"} was provided</span></pre></td></tr>
+<tr> <td class="numLine"> 273</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * and a regular expression replacement if {@code "pattern"} was provided.</span></pre></td></tr>
+<tr> <td class="numLine"> 274</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <p>Example configuration:</span></pre></td></tr>
+<tr> <td class="numLine"> 276</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * <pre><code>overwrite=false</span></pre></td></tr>
+<tr> <td class="numLine"> 277</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *key1=favorite</span></pre></td></tr>
+<tr> <td class="numLine"> 278</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *key5=least favorite</span></pre></td></tr>
+<tr> <td class="numLine"> 279</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *pattern=(Java|C|Perl)</span></pre></td></tr>
+<tr> <td class="numLine"> 280</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *replacement=$1 (but it should be x86 assembler)</code</pre></span></pre></td></tr>
+<tr> <td class="numLine"> 281</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 282</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> DocumentTransform replaceMetadata(Map<String, String> config) {</pre></td></tr>
+<tr> <td class="numLineCover"> 283</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> overwrite = <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 284</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String overwriteString = config.get(<span class="string">"overwrite"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 285</td> <td class="nbHitsCovered"><a title="Line 285: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 285: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (overwriteString != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 286</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> overwrite = Boolean.parseBoolean(overwriteString);</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"> 6</td> <td class="src"><pre class="src"> String string = config.get(<span class="string">"string"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 289</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String pattern = config.get(<span class="string">"pattern"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 290</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String replacement = config.get(<span class="string">"replacement"</span>);</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> (replacement == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 292</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">"Missing replacement"</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="numLine"> 294</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Pattern toMatch;</pre></td></tr>
+<tr> <td class="numLine"> 295</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String replacementPattern;</pre></td></tr>
+<tr> <td class="numLineCover"> 296</td> <td class="nbHitsCovered"><a title="Line 296: Conditional coverage 100% (2/2)."> 5</a></td> <td class="src"><pre class="src"> <a title="Line 296: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (string != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 297</td> <td class="nbHitsCovered"><a title="Line 297: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 297: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (pattern != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 298</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(</pre></td></tr>
+<tr> <td class="numLine"> 299</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Using both string and pattern is not permitted"</span>);</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="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> toMatch = Pattern.compile(Pattern.quote(string));</pre></td></tr>
+<tr> <td class="numLineCover"> 302</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> replacementPattern = Matcher.quoteReplacement(replacement);</pre></td></tr>
+<tr> <td class="numLineCover"> 303</td> <td class="nbHitsCovered"><a title="Line 303: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 303: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (pattern != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 304</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> toMatch = Pattern.compile(pattern);</pre></td></tr>
+<tr> <td class="numLineCover"> 305</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> replacementPattern = replacement;</pre></td></tr>
+<tr> <td class="numLine"> 306</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 307</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(</pre></td></tr>
+<tr> <td class="numLine"> 308</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Neither string or pattern is defined"</span>);</pre></td></tr>
<tr> <td class="numLine"> 309</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 310</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> ReplaceTransform(keys, toMatch, replacementPattern, overwrite);</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>
+<tr> <td class="numLine"> 310</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="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> ReplaceTransform <span class="keyword">implements</span> DocumentTransform {</pre></td></tr>
+<tr> <td class="numLineCover"> 311</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> Set<String> keys = <span class="keyword">new</span> HashSet<String>(parseList(config, <span class="string">"key"</span>));</pre></td></tr>
+<tr> <td class="numLineCover"> 312</td> <td class="nbHitsCovered"><a title="Line 312: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 312: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (keys.isEmpty()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 313</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.warning(<span class="string">"No entries listed to replace"</span>);</pre></td></tr>
<tr> <td class="numLine"> 314</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> List<String> keys;</pre></td></tr>
-<tr> <td class="numLine"> 315</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Pattern toMatch;</pre></td></tr>
-<tr> <td class="numLine"> 316</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> String replacement;</pre></td></tr>
-<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">boolean</span> overwrite;</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">public</span> ReplaceTransform(Collection<String> keys, Pattern toMatch,</pre></td></tr>
-<tr> <td class="numLineCover"> 320</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> String replacement, <span class="keyword">boolean</span> overwrite) {</pre></td></tr>
-<tr> <td class="numLineCover"> 321</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.keys = Collections.unmodifiableList(<span class="keyword">new</span> ArrayList<String>(keys));</pre></td></tr>
-<tr> <td class="numLineCover"> 322</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.toMatch = toMatch;</pre></td></tr>
-<tr> <td class="numLineCover"> 323</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.replacement = replacement;</pre></td></tr>
-<tr> <td class="numLineCover"> 324</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.overwrite = overwrite;</pre></td></tr>
-<tr> <td class="numLineCover"> 325</td> <td class="nbHitsCovered"> 3</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"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 328</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> transform(Metadata metadata, Map<String, String> params) {</pre></td></tr>
-<tr> <td class="numLineCover"> 329</td> <td class="nbHitsCovered"><a title="Line 329: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 329: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String key : keys) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 330</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> Set<String> original = metadata.getAllValues(key);</pre></td></tr>
-<tr> <td class="numLineCover"> 331</td> <td class="nbHitsCovered"><a title="Line 331: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 331: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (original.isEmpty()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 332</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"No values for {0}. Skipping"</span>, key);</pre></td></tr>
-<tr> <td class="numLineCover"> 333</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
-<tr> <td class="numLine"> 334</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 335</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Replacing values that match {0} with {1}: {2}"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 336</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {toMatch, replacement, original});</pre></td></tr>
-<tr> <td class="numLineCover"> 337</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> Set<String> values = <span class="keyword">new</span> HashSet<String>(original);</pre></td></tr>
-<tr> <td class="numLineCover"> 338</td> <td class="nbHitsCovered"><a title="Line 338: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 338: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String value : original) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 339</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String newValue = toMatch.matcher(value).replaceAll(replacement);</pre></td></tr>
-<tr> <td class="numLineCover"> 340</td> <td class="nbHitsCovered"><a title="Line 340: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 340: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (overwrite) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 341</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> values.remove(value);</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="numLineCover"> 343</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> values.add(newValue);</pre></td></tr>
-<tr> <td class="numLineCover"> 344</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 345</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"After replacing: {0}"</span>, values);</pre></td></tr>
-<tr> <td class="numLineCover"> 346</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> metadata.set(key, values);</pre></td></tr>
-<tr> <td class="numLineCover"> 347</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 348</td> <td class="nbHitsCovered"> 2</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"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 351</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"> 352</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="string">"ReplaceTransform(keys="</span> + keys + <span class="string">",toMatch="</span> + toMatch</pre></td></tr>
-<tr> <td class="numLine"> 353</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">",replacement="</span> + replacement + <span class="string">",overwrite="</span> + overwrite + <span class="string">")"</span>;</pre></td></tr>
-<tr> <td class="numLine"> 354</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 355</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 315</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> ReplaceTransform(keys, toMatch, replacementPattern, overwrite);</pre></td></tr>
+<tr> <td class="numLine"> 316</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> ReplaceTransform <span class="keyword">implements</span> DocumentTransform {</pre></td></tr>
+<tr> <td class="numLine"> 319</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> List<String> keys;</pre></td></tr>
+<tr> <td class="numLine"> 320</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Pattern toMatch;</pre></td></tr>
+<tr> <td class="numLine"> 321</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> String replacement;</pre></td></tr>
+<tr> <td class="numLine"> 322</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">boolean</span> overwrite;</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"> <span class="keyword">public</span> ReplaceTransform(Collection<String> keys, Pattern toMatch,</pre></td></tr>
+<tr> <td class="numLineCover"> 325</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> String replacement, <span class="keyword">boolean</span> overwrite) {</pre></td></tr>
+<tr> <td class="numLineCover"> 326</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.keys = Collections.unmodifiableList(<span class="keyword">new</span> ArrayList<String>(keys));</pre></td></tr>
+<tr> <td class="numLineCover"> 327</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.toMatch = toMatch;</pre></td></tr>
+<tr> <td class="numLineCover"> 328</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.replacement = replacement;</pre></td></tr>
+<tr> <td class="numLineCover"> 329</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.overwrite = overwrite;</pre></td></tr>
+<tr> <td class="numLineCover"> 330</td> <td class="nbHitsCovered"> 3</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"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 333</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> transform(Metadata metadata, Map<String, String> params) {</pre></td></tr>
+<tr> <td class="numLineCover"> 334</td> <td class="nbHitsCovered"><a title="Line 334: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 334: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String key : keys) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 335</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> Set<String> original = metadata.getAllValues(key);</pre></td></tr>
+<tr> <td class="numLineCover"> 336</td> <td class="nbHitsCovered"><a title="Line 336: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 336: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (original.isEmpty()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 337</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"No values for {0}. Skipping"</span>, key);</pre></td></tr>
+<tr> <td class="numLineCover"> 338</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
+<tr> <td class="numLine"> 339</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 340</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Replacing values that match {0} with {1}: {2}"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 341</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {toMatch, replacement, original});</pre></td></tr>
+<tr> <td class="numLineCover"> 342</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> Set<String> values = <span class="keyword">new</span> HashSet<String>(original);</pre></td></tr>
+<tr> <td class="numLineCover"> 343</td> <td class="nbHitsCovered"><a title="Line 343: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 343: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String value : original) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 344</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String newValue = toMatch.matcher(value).replaceAll(replacement);</pre></td></tr>
+<tr> <td class="numLineCover"> 345</td> <td class="nbHitsCovered"><a title="Line 345: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 345: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (overwrite) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 346</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> values.remove(value);</pre></td></tr>
+<tr> <td class="numLine"> 347</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 348</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> values.add(newValue);</pre></td></tr>
+<tr> <td class="numLineCover"> 349</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 350</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"After replacing: {0}"</span>, values);</pre></td></tr>
+<tr> <td class="numLineCover"> 351</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> metadata.set(key, values);</pre></td></tr>
+<tr> <td class="numLineCover"> 352</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 353</td> <td class="nbHitsCovered"> 2</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"> @Override</pre></td></tr>
<tr> <td class="numLine"> 356</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"> 357</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="string">"ReplaceTransform(keys="</span> + keys + <span class="string">",toMatch="</span> + toMatch</pre></td></tr>
+<tr> <td class="numLine"> 358</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">",replacement="</span> + replacement + <span class="string">",overwrite="</span> + overwrite + <span class="string">")"</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="numLine"> 360</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 361</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.examples.html b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.examples.html
index f8cc80d..5f70ab5 100644
--- a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.examples.html
+++ b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.examples.html
@@ -29,6 +29,9 @@
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.examples.GroupDefinitionsWriter.html">GroupDefinitionsWriter</a> <i>(0%)</i></td>
</tr>
+<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.examples.MetadataTransformExample.html">MetadataTransformExample</a> <i>(88%)</i></td>
+</tr>
</tbody>
</table>
</body>
diff --git a/coverage/frame-sourcefiles.html b/coverage/frame-sourcefiles.html
index 37c6706..4472235 100644
--- a/coverage/frame-sourcefiles.html
+++ b/coverage/frame-sourcefiles.html
@@ -204,6 +204,9 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.Metadata.html">Metadata</a> <i>(83%)</i></td>
</tr>
<tr>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.examples.MetadataTransformExample.html">MetadataTransformExample</a> <i>(88%)</i></td>
+</tr>
+<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.NamespacedSession.html">NamespacedSession</a> <i>(100%)</i></td>
</tr>
<tr>
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.examples.html b/coverage/frame-summary-com.google.enterprise.adaptor.examples.html
index 9f73a71..1076704 100644
--- a/coverage/frame-summary-com.google.enterprise.adaptor.examples.html
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.examples.html
@@ -16,7 +16,7 @@
<table class="report" id="packageResults">
<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
<tbody>
- <tr><td><a href="frame-summary-com.google.enterprise.adaptor.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">7</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">273</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/273</span></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:0px"><span class="text">0/58</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.324324324324324;</span>2.324</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">276</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:7px"><span class="text">22/298</span></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.3333333333333335;</span>2.333</td></tr>
</tbody>
</table>
<script type="text/javascript">
@@ -40,6 +40,8 @@
<tr><td><a href="com.google.enterprise.adaptor.examples.GroupDefinitionsWriter.html">GroupDefinitionsWriter</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:0px"><span class="text">0/16</span></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.examples.MetadataTransformExample.html">MetadataTransformExample</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:88px"><span class="text">22/25</span></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:70px"><span class="text">7/10</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.4;</span>2.4</td></tr>
+
</tbody>
</table>
<script type="text/javascript">
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.html b/coverage/frame-summary-com.google.enterprise.adaptor.html
index d0e2432..f91e7a4 100644
--- a/coverage/frame-summary-com.google.enterprise.adaptor.html
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.html
@@ -17,9 +17,9 @@
<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">203</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">738</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:84px"><span class="text">4037/4775</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">275</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:82px"><span class="text">1303/1578</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.428421052631579;</span>2.428</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">7</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">273</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/273</span></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:0px"><span class="text">0/58</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.324324324324324;</span>2.324</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">276</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:7px"><span class="text">22/298</span></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.3333333333333335;</span>2.333</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">146</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:72px"><span class="text">393/539</span></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">119/176</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.5824175824175826;</span>2.582</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">146</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:73px"><span class="text">396/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>
</tbody>
</table>
<script type="text/javascript">
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.prebuilt.html b/coverage/frame-summary-com.google.enterprise.adaptor.prebuilt.html
index 5d3ce83..c855c2a 100644
--- a/coverage/frame-summary-com.google.enterprise.adaptor.prebuilt.html
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.prebuilt.html
@@ -16,7 +16,7 @@
<table class="report" id="packageResults">
<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
<tbody>
- <tr><td><a href="frame-summary-com.google.enterprise.adaptor.prebuilt.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html"'>com.google.enterprise.adaptor.prebuilt</a></td><td class="value">25</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">146</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:72px"><span class="text">393/539</span></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">119/176</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.5824175824175826;</span>2.582</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">146</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:73px"><span class="text">396/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>
</tbody>
</table>
<script type="text/javascript">
@@ -39,12 +39,12 @@
<tr><td><a href="com.google.enterprise.adaptor.prebuilt.FileSystemAdaptor.html">FileSystemAdaptor</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:0px"><span class="text">0/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">22</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/22</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5714285714285716;</span>3.571</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms</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:98px"><span class="text">80/81</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">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 class="value"><span class="hidden">2.8421052631578947;</span>2.842</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$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.8421052631578947;</span>2.842</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$CopyTransform</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">10/10</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8421052631578947;</span>2.842</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$DeleteTransform</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">7/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">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 class="value"><span class="hidden">2.8421052631578947;</span>2.842</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$KeyPairing</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:75px"><span class="text">6/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:50px"><span class="text">2/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8421052631578947;</span>2.842</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$ReplaceTransform</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.8421052631578947;</span>2.842</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms</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:98px"><span class="text">83/84</span></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">40/40</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8947368421052633;</span>2.895</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$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.8947368421052633;</span>2.895</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$CopyTransform</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">10/10</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8947368421052633;</span>2.895</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$DeleteTransform</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">7/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">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 class="value"><span class="hidden">2.8947368421052633;</span>2.895</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$KeyPairing</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:75px"><span class="text">6/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:50px"><span class="text">2/4</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.8947368421052633;</span>2.895</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.prebuilt.PrebuiltTransforms.html">PrebuiltTransforms$ReplaceTransform</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.8947368421052633;</span>2.895</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.prebuilt.RecursiveFileIterator.html">RecursiveFileIterator</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:86px"><span class="text">20/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">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:90px"><span class="text">9/10</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.prebuilt.RecursiveFileIterator.html">RecursiveFileIterator$WrappedIOException</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:60px"><span class="text">3/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">2.125;</span>2.125</td></tr>
diff --git a/coverage/frame-summary.html b/coverage/frame-summary.html
index 623fc7c..ae5f49e 100644
--- a/coverage/frame-summary.html
+++ b/coverage/frame-summary.html
@@ -16,11 +16,11 @@
<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">243</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1376</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:76px"><span class="text">4430/5806</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">467</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:75px"><span class="text">1422/1889</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.468721668177697;</span>2.469</td></tr>
+ <tr><td><b>All Packages</b></td><td class="value">244</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1379</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:76px"><span class="text">4455/5834</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">470</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:75px"><span class="text">1431/1901</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.4693140794223827;</span>2.469</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">203</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">738</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:84px"><span class="text">4037/4775</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">275</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:82px"><span class="text">1303/1578</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.428421052631579;</span>2.428</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">7</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">273</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/273</span></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:0px"><span class="text">0/58</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.324324324324324;</span>2.324</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">276</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:7px"><span class="text">22/298</span></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.3333333333333335;</span>2.333</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">146</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:72px"><span class="text">393/539</span></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">119/176</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.5824175824175826;</span>2.582</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">146</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:73px"><span class="text">396/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>
</tbody>
</table>
<script type="text/javascript">
diff --git a/javadoc/allclasses-frame.html b/javadoc/allclasses-frame.html
index 2352105..17d366b 100644
--- a/javadoc/allclasses-frame.html
+++ b/javadoc/allclasses-frame.html
@@ -99,6 +99,8 @@
<BR>
<A HREF="com/google/enterprise/adaptor/Metadata.html" title="class in com.google.enterprise.adaptor" target="classFrame">Metadata</A>
<BR>
+<A HREF="com/google/enterprise/adaptor/examples/MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples" target="classFrame">MetadataTransformExample</A>
+<BR>
<A HREF="com/google/enterprise/adaptor/PollingIncrementalLister.html" title="interface in com.google.enterprise.adaptor" target="classFrame"><I>PollingIncrementalLister</I></A>
<BR>
<A HREF="com/google/enterprise/adaptor/prebuilt/PrebuiltTransforms.html" title="class in com.google.enterprise.adaptor.prebuilt" target="classFrame">PrebuiltTransforms</A>
diff --git a/javadoc/allclasses-noframe.html b/javadoc/allclasses-noframe.html
index 6278425..dd1ad09 100644
--- a/javadoc/allclasses-noframe.html
+++ b/javadoc/allclasses-noframe.html
@@ -99,6 +99,8 @@
<BR>
<A HREF="com/google/enterprise/adaptor/Metadata.html" title="class in com.google.enterprise.adaptor">Metadata</A>
<BR>
+<A HREF="com/google/enterprise/adaptor/examples/MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples">MetadataTransformExample</A>
+<BR>
<A HREF="com/google/enterprise/adaptor/PollingIncrementalLister.html" title="interface in com.google.enterprise.adaptor"><I>PollingIncrementalLister</I></A>
<BR>
<A HREF="com/google/enterprise/adaptor/prebuilt/PrebuiltTransforms.html" title="class in com.google.enterprise.adaptor.prebuilt">PrebuiltTransforms</A>
diff --git a/javadoc/com/google/enterprise/adaptor/DocumentTransform.html b/javadoc/com/google/enterprise/adaptor/DocumentTransform.html
index e646a89..601270a 100644
--- a/javadoc/com/google/enterprise/adaptor/DocumentTransform.html
+++ b/javadoc/com/google/enterprise/adaptor/DocumentTransform.html
@@ -89,7 +89,7 @@
<BR>
Interface DocumentTransform</H2>
<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/enterprise/adaptor/prebuilt/CommandLineTransform.html" title="class in com.google.enterprise.adaptor.prebuilt">CommandLineTransform</A></DD>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/enterprise/adaptor/prebuilt/CommandLineTransform.html" title="class in com.google.enterprise.adaptor.prebuilt">CommandLineTransform</A>, <A HREF="../../../../com/google/enterprise/adaptor/examples/MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples">MetadataTransformExample</A></DD>
</DL>
<HR>
<DL>
diff --git a/javadoc/com/google/enterprise/adaptor/examples/GroupDefinitionsWriter.html b/javadoc/com/google/enterprise/adaptor/examples/GroupDefinitionsWriter.html
index d6bf68b..17734e9 100644
--- a/javadoc/com/google/enterprise/adaptor/examples/GroupDefinitionsWriter.html
+++ b/javadoc/com/google/enterprise/adaptor/examples/GroupDefinitionsWriter.html
@@ -53,7 +53,7 @@
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../../../com/google/enterprise/adaptor/examples/FileSystemAdaptor.html" title="class in com.google.enterprise.adaptor.examples"><B>PREV CLASS</B></A>
- NEXT CLASS</FONT></TD>
+ <A HREF="../../../../../com/google/enterprise/adaptor/examples/MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../../../index.html?com/google/enterprise/adaptor/examples/GroupDefinitionsWriter.html" target="_top"><B>FRAMES</B></A>
<A HREF="GroupDefinitionsWriter.html" target="_top"><B>NO FRAMES</B></A>
@@ -302,7 +302,7 @@
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../../../com/google/enterprise/adaptor/examples/FileSystemAdaptor.html" title="class in com.google.enterprise.adaptor.examples"><B>PREV CLASS</B></A>
- NEXT CLASS</FONT></TD>
+ <A HREF="../../../../../com/google/enterprise/adaptor/examples/MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="../../../../../index.html?com/google/enterprise/adaptor/examples/GroupDefinitionsWriter.html" target="_top"><B>FRAMES</B></A>
<A HREF="GroupDefinitionsWriter.html" target="_top"><B>NO FRAMES</B></A>
diff --git a/javadoc/com/google/enterprise/adaptor/examples/MetadataTransformExample.html b/javadoc/com/google/enterprise/adaptor/examples/MetadataTransformExample.html
new file mode 100644
index 0000000..49debab
--- /dev/null
+++ b/javadoc/com/google/enterprise/adaptor/examples/MetadataTransformExample.html
@@ -0,0 +1,281 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<TITLE>
+MetadataTransformExample
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="MetadataTransformExample";
+ }
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+<HR>
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../com/google/enterprise/adaptor/examples/GroupDefinitionsWriter.html" title="class in com.google.enterprise.adaptor.examples"><B>PREV CLASS</B></A>
+ NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/enterprise/adaptor/examples/MetadataTransformExample.html" target="_top"><B>FRAMES</B></A>
+ <A HREF="MetadataTransformExample.html" target="_top"><B>NO FRAMES</B></A>
+ <SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY: NESTED | FIELD | CONSTR | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | CONSTR | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.google.enterprise.adaptor.examples</FONT>
+<BR>
+Class MetadataTransformExample</H2>
+<PRE>
+<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
+ <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.enterprise.adaptor.examples.MetadataTransformExample</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/google/enterprise/adaptor/DocumentTransform.html" title="interface in com.google.enterprise.adaptor">DocumentTransform</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>MetadataTransformExample</B><DT>extends <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../../com/google/enterprise/adaptor/DocumentTransform.html" title="interface in com.google.enterprise.adaptor">DocumentTransform</A></DL>
+</PRE>
+
+<P>
+Example transform which will move values from one key to another.
+ <p>
+ For example the values under key "creator" could be moved to
+ be under the key "author".
+<P>
+
+<P>
+<HR>
+
+<P>
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static <A HREF="../../../../../com/google/enterprise/adaptor/examples/MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples">MetadataTransformExample</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/enterprise/adaptor/examples/MetadataTransformExample.html#create(java.util.Map)">create</A></B>(<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A><<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>,<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>> cfg)</CODE>
+
+<BR>
+ Makes transform from config with "src" and "dest" keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/enterprise/adaptor/examples/MetadataTransformExample.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+ </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/google/enterprise/adaptor/examples/MetadataTransformExample.html#transform(com.google.enterprise.adaptor.Metadata, java.util.Map)">transform</A></B>(<A HREF="../../../../../com/google/enterprise/adaptor/Metadata.html" title="class in com.google.enterprise.adaptor">Metadata</A> metadata,
+ <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A><<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>,<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>> params)</CODE>
+
+<BR>
+ Any changes to <code>metadata</code> and <code>params</code> will be
+ passed on to subsequent transforms.</TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="create(java.util.Map)"><!-- --></A><H3>
+create</H3>
+<PRE>
+public static <A HREF="../../../../../com/google/enterprise/adaptor/examples/MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples">MetadataTransformExample</A> <B>create</B>(<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A><<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>,<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>> cfg)</PRE>
+<DL>
+<DD>Makes transform from config with "src" and "dest" keys.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="transform(com.google.enterprise.adaptor.Metadata, java.util.Map)"><!-- --></A><H3>
+transform</H3>
+<PRE>
+public void <B>transform</B>(<A HREF="../../../../../com/google/enterprise/adaptor/Metadata.html" title="class in com.google.enterprise.adaptor">Metadata</A> metadata,
+ <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A><<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>,<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>> params)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/enterprise/adaptor/DocumentTransform.html#transform(com.google.enterprise.adaptor.Metadata, java.util.Map)">DocumentTransform</A></CODE></B></DD>
+<DD>Any changes to <code>metadata</code> and <code>params</code> will be
+ passed on to subsequent transforms. This method must be thread-safe.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/enterprise/adaptor/DocumentTransform.html#transform(com.google.enterprise.adaptor.Metadata, java.util.Map)">transform</A></CODE> in interface <CODE><A HREF="../../../../../com/google/enterprise/adaptor/DocumentTransform.html" title="interface in com.google.enterprise.adaptor">DocumentTransform</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../com/google/enterprise/adaptor/examples/GroupDefinitionsWriter.html" title="class in com.google.enterprise.adaptor.examples"><B>PREV CLASS</B></A>
+ NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html?com/google/enterprise/adaptor/examples/MetadataTransformExample.html" target="_top"><B>FRAMES</B></A>
+ <A HREF="MetadataTransformExample.html" target="_top"><B>NO FRAMES</B></A>
+ <SCRIPT type="text/javascript">
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+ <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY: NESTED | FIELD | CONSTR | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | CONSTR | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/javadoc/com/google/enterprise/adaptor/examples/package-frame.html b/javadoc/com/google/enterprise/adaptor/examples/package-frame.html
index ef10663..445e375 100644
--- a/javadoc/com/google/enterprise/adaptor/examples/package-frame.html
+++ b/javadoc/com/google/enterprise/adaptor/examples/package-frame.html
@@ -29,7 +29,9 @@
<BR>
<A HREF="FileSystemAdaptor.html" title="class in com.google.enterprise.adaptor.examples" target="classFrame">FileSystemAdaptor</A>
<BR>
-<A HREF="GroupDefinitionsWriter.html" title="class in com.google.enterprise.adaptor.examples" target="classFrame">GroupDefinitionsWriter</A></FONT></TD>
+<A HREF="GroupDefinitionsWriter.html" title="class in com.google.enterprise.adaptor.examples" target="classFrame">GroupDefinitionsWriter</A>
+<BR>
+<A HREF="MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples" target="classFrame">MetadataTransformExample</A></FONT></TD>
</TR>
</TABLE>
diff --git a/javadoc/com/google/enterprise/adaptor/examples/package-summary.html b/javadoc/com/google/enterprise/adaptor/examples/package-summary.html
index dda3896..c6cac8d 100644
--- a/javadoc/com/google/enterprise/adaptor/examples/package-summary.html
+++ b/javadoc/com/google/enterprise/adaptor/examples/package-summary.html
@@ -108,6 +108,10 @@
<TD WIDTH="15%"><B><A HREF="../../../../../com/google/enterprise/adaptor/examples/GroupDefinitionsWriter.html" title="class in com.google.enterprise.adaptor.examples">GroupDefinitionsWriter</A></B></TD>
<TD>Demonstrates sending group definitions to GSA.</TD>
</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../com/google/enterprise/adaptor/examples/MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples">MetadataTransformExample</A></B></TD>
+<TD>Example transform which will move values from one key to another.</TD>
+</TR>
</TABLE>
diff --git a/javadoc/com/google/enterprise/adaptor/examples/package-tree.html b/javadoc/com/google/enterprise/adaptor/examples/package-tree.html
index 9b63394..e698091 100644
--- a/javadoc/com/google/enterprise/adaptor/examples/package-tree.html
+++ b/javadoc/com/google/enterprise/adaptor/examples/package-tree.html
@@ -93,6 +93,7 @@
<UL>
<LI TYPE="circle">com.google.enterprise.adaptor.examples.<A HREF="../../../../../com/google/enterprise/adaptor/examples/AdaptorTemplate.html" title="class in com.google.enterprise.adaptor.examples"><B>AdaptorTemplate</B></A><LI TYPE="circle">com.google.enterprise.adaptor.examples.<A HREF="../../../../../com/google/enterprise/adaptor/examples/AdaptorWithCrawlTimeMetadataTemplate.html" title="class in com.google.enterprise.adaptor.examples"><B>AdaptorWithCrawlTimeMetadataTemplate</B></A> (implements com.google.enterprise.adaptor.<A HREF="../../../../../com/google/enterprise/adaptor/AuthzAuthority.html" title="interface in com.google.enterprise.adaptor">AuthzAuthority</A>)
<LI TYPE="circle">com.google.enterprise.adaptor.examples.<A HREF="../../../../../com/google/enterprise/adaptor/examples/DbAdaptorTemplate.html" title="class in com.google.enterprise.adaptor.examples"><B>DbAdaptorTemplate</B></A><LI TYPE="circle">com.google.enterprise.adaptor.examples.<A HREF="../../../../../com/google/enterprise/adaptor/examples/FileSystemAdaptor.html" title="class in com.google.enterprise.adaptor.examples"><B>FileSystemAdaptor</B></A><LI TYPE="circle">com.google.enterprise.adaptor.examples.<A HREF="../../../../../com/google/enterprise/adaptor/examples/GroupDefinitionsWriter.html" title="class in com.google.enterprise.adaptor.examples"><B>GroupDefinitionsWriter</B></A></UL>
+<LI TYPE="circle">com.google.enterprise.adaptor.examples.<A HREF="../../../../../com/google/enterprise/adaptor/examples/MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples"><B>MetadataTransformExample</B></A> (implements com.google.enterprise.adaptor.<A HREF="../../../../../com/google/enterprise/adaptor/DocumentTransform.html" title="interface in com.google.enterprise.adaptor">DocumentTransform</A>)
</UL>
</UL>
<HR>
diff --git a/javadoc/index-all.html b/javadoc/index-all.html
index 59d1914..972e16f 100644
--- a/javadoc/index-all.html
+++ b/javadoc/index-all.html
@@ -171,6 +171,9 @@
<DT><A HREF="./com/google/enterprise/adaptor/IOHelper.html#copyStream(java.io.InputStream, java.io.OutputStream)"><B>copyStream(InputStream, OutputStream)</B></A> -
Static method in class com.google.enterprise.adaptor.<A HREF="./com/google/enterprise/adaptor/IOHelper.html" title="class in com.google.enterprise.adaptor">IOHelper</A>
<DD>Copy contents of <code>in</code> to <code>out</code>.
+<DT><A HREF="./com/google/enterprise/adaptor/examples/MetadataTransformExample.html#create(java.util.Map)"><B>create(Map<String, String>)</B></A> -
+Static method in class com.google.enterprise.adaptor.examples.<A HREF="./com/google/enterprise/adaptor/examples/MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples">MetadataTransformExample</A>
+<DD>Makes transform from config with "src" and "dest" keys.
<DT><A HREF="./com/google/enterprise/adaptor/prebuilt/CommandLineTransform.html#create(java.util.Map)"><B>create(Map<String, String>)</B></A> -
Static method in class com.google.enterprise.adaptor.prebuilt.<A HREF="./com/google/enterprise/adaptor/prebuilt/CommandLineTransform.html" title="class in com.google.enterprise.adaptor.prebuilt">CommandLineTransform</A>
<DD>Accepts keys <code>"cmd"</code>, <code>"workingDirectory"</code>, and <code>"arg?"</code>.
@@ -749,7 +752,7 @@
<DT><A HREF="./com/google/enterprise/adaptor/Metadata.html#Metadata(java.lang.Iterable)"><B>Metadata(Iterable<Map.Entry<String, String>>)</B></A> -
Constructor for class com.google.enterprise.adaptor.<A HREF="./com/google/enterprise/adaptor/Metadata.html" title="class in com.google.enterprise.adaptor">Metadata</A>
<DD>Duplicate.
-<DT><A HREF="./com/google/enterprise/adaptor/prebuilt/PrebuiltTransforms.html#moveMetadata(java.util.Map)"><B>moveMetadata(Map<String, String>)</B></A> -
+<DT><A HREF="./com/google/enterprise/adaptor/examples/MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples"><B>MetadataTransformExample</B></A> - Class in <A HREF="./com/google/enterprise/adaptor/examples/package-summary.html">com.google.enterprise.adaptor.examples</A><DD>Example transform which will move values from one key to another.<DT><A HREF="./com/google/enterprise/adaptor/prebuilt/PrebuiltTransforms.html#moveMetadata(java.util.Map)"><B>moveMetadata(Map<String, String>)</B></A> -
Static method in class com.google.enterprise.adaptor.prebuilt.<A HREF="./com/google/enterprise/adaptor/prebuilt/PrebuiltTransforms.html" title="class in com.google.enterprise.adaptor.prebuilt">PrebuiltTransforms</A>
<DD>Returns a transform that moves metadata values from one key to another.
</DL>
@@ -1086,6 +1089,9 @@
Method in class com.google.enterprise.adaptor.<A HREF="./com/google/enterprise/adaptor/DocIdPusher.Record.html" title="class in com.google.enterprise.adaptor">DocIdPusher.Record</A>
<DD>Generates a string representation of this instance useful for debugging
that contains all visible fields.
+<DT><A HREF="./com/google/enterprise/adaptor/examples/MetadataTransformExample.html#toString()"><B>toString()</B></A> -
+Method in class com.google.enterprise.adaptor.examples.<A HREF="./com/google/enterprise/adaptor/examples/MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples">MetadataTransformExample</A>
+<DD>
<DT><A HREF="./com/google/enterprise/adaptor/Metadata.html#toString()"><B>toString()</B></A> -
Method in class com.google.enterprise.adaptor.<A HREF="./com/google/enterprise/adaptor/Metadata.html" title="class in com.google.enterprise.adaptor">Metadata</A>
<DD>Contains every key and value pair; useful for debugging.
@@ -1096,6 +1102,9 @@
Method in interface com.google.enterprise.adaptor.<A HREF="./com/google/enterprise/adaptor/DocumentTransform.html" title="interface in com.google.enterprise.adaptor">DocumentTransform</A>
<DD>Any changes to <code>metadata</code> and <code>params</code> will be
passed on to subsequent transforms.
+<DT><A HREF="./com/google/enterprise/adaptor/examples/MetadataTransformExample.html#transform(com.google.enterprise.adaptor.Metadata, java.util.Map)"><B>transform(Metadata, Map<String, String>)</B></A> -
+Method in class com.google.enterprise.adaptor.examples.<A HREF="./com/google/enterprise/adaptor/examples/MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples">MetadataTransformExample</A>
+<DD>
<DT><A HREF="./com/google/enterprise/adaptor/prebuilt/CommandLineTransform.html#transform(com.google.enterprise.adaptor.Metadata, java.util.Map)"><B>transform(Metadata, Map<String, String>)</B></A> -
Method in class com.google.enterprise.adaptor.prebuilt.<A HREF="./com/google/enterprise/adaptor/prebuilt/CommandLineTransform.html" title="class in com.google.enterprise.adaptor.prebuilt">CommandLineTransform</A>
<DD>
diff --git a/javadoc/overview-tree.html b/javadoc/overview-tree.html
index 64948f9..9eb7300 100644
--- a/javadoc/overview-tree.html
+++ b/javadoc/overview-tree.html
@@ -99,6 +99,7 @@
<LI TYPE="circle">com.google.enterprise.adaptor.<A HREF="com/google/enterprise/adaptor/DocIdPusher.Record.html" title="class in com.google.enterprise.adaptor"><B>DocIdPusher.Record</B></A><LI TYPE="circle">com.google.enterprise.adaptor.<A HREF="com/google/enterprise/adaptor/DocIdPusher.Record.Builder.html" title="class in com.google.enterprise.adaptor"><B>DocIdPusher.Record.Builder</B></A><LI TYPE="circle">com.google.enterprise.adaptor.<A HREF="com/google/enterprise/adaptor/ExceptionHandlers.html" title="class in com.google.enterprise.adaptor"><B>ExceptionHandlers</B></A><LI TYPE="circle">java.util.logging.<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/logging/Formatter.html?is-external=true" title="class or interface in java.util.logging"><B>Formatter</B></A><UL>
<LI TYPE="circle">com.google.enterprise.adaptor.<A HREF="com/google/enterprise/adaptor/CustomFormatter.html" title="class in com.google.enterprise.adaptor"><B>CustomFormatter</B></A></UL>
<LI TYPE="circle">com.google.enterprise.adaptor.<A HREF="com/google/enterprise/adaptor/GsaCommunicationHandler.html" title="class in com.google.enterprise.adaptor"><B>GsaCommunicationHandler</B></A><LI TYPE="circle">com.google.enterprise.adaptor.<A HREF="com/google/enterprise/adaptor/HttpExchanges.html" title="class in com.google.enterprise.adaptor"><B>HttpExchanges</B></A><LI TYPE="circle">com.google.enterprise.adaptor.<A HREF="com/google/enterprise/adaptor/IOHelper.html" title="class in com.google.enterprise.adaptor"><B>IOHelper</B></A><LI TYPE="circle">com.google.enterprise.adaptor.<A HREF="com/google/enterprise/adaptor/Metadata.html" title="class in com.google.enterprise.adaptor"><B>Metadata</B></A> (implements java.lang.<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A><T>)
+<LI TYPE="circle">com.google.enterprise.adaptor.examples.<A HREF="com/google/enterprise/adaptor/examples/MetadataTransformExample.html" title="class in com.google.enterprise.adaptor.examples"><B>MetadataTransformExample</B></A> (implements com.google.enterprise.adaptor.<A HREF="com/google/enterprise/adaptor/DocumentTransform.html" title="interface in com.google.enterprise.adaptor">DocumentTransform</A>)
<LI TYPE="circle">com.google.enterprise.adaptor.prebuilt.<A HREF="com/google/enterprise/adaptor/prebuilt/PrebuiltTransforms.html" title="class in com.google.enterprise.adaptor.prebuilt"><B>PrebuiltTransforms</B></A><LI TYPE="circle">com.google.enterprise.adaptor.<A HREF="com/google/enterprise/adaptor/Principal.html" title="class in com.google.enterprise.adaptor"><B>Principal</B></A> (implements java.lang.<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A><T>)
<UL>
<LI TYPE="circle">com.google.enterprise.adaptor.<A HREF="com/google/enterprise/adaptor/GroupPrincipal.html" title="class in com.google.enterprise.adaptor"><B>GroupPrincipal</B></A><LI TYPE="circle">com.google.enterprise.adaptor.<A HREF="com/google/enterprise/adaptor/UserPrincipal.html" title="class in com.google.enterprise.adaptor"><B>UserPrincipal</B></A></UL>