| <!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.prebuilt.PrebuiltTransforms</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.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> |
| <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.prebuilt;</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.ArrayList;</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.Collection;</pre></td></tr> |
| <tr> <td class="numLine"> 22</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Collections;</pre></td></tr> |
| <tr> <td class="numLine"> 23</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.HashMap;</pre></td></tr> |
| <tr> <td class="numLine"> 24</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.HashSet;</pre></td></tr> |
| <tr> <td class="numLine"> 25</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.LinkedList;</pre></td></tr> |
| <tr> <td class="numLine"> 26</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.List;</pre></td></tr> |
| <tr> <td class="numLine"> 27</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Map;</pre></td></tr> |
| <tr> <td class="numLine"> 28</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Set;</pre></td></tr> |
| <tr> <td class="numLine"> 29</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.TreeMap;</pre></td></tr> |
| <tr> <td class="numLine"> 30</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.logging.Level;</pre></td></tr> |
| <tr> <td class="numLine"> 31</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.logging.Logger;</pre></td></tr> |
| <tr> <td class="numLine"> 32</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.regex.Matcher;</pre></td></tr> |
| <tr> <td class="numLine"> 33</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">import</span> java.util.regex.Pattern;</pre></td></tr> |
| <tr> <td class="numLine"> 34</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 35</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 36</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Common transforms that you would expect to have available.</span></pre></td></tr> |
| <tr> <td class="numLine"> 37</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> PrebuiltTransforms {</pre></td></tr> |
| <tr> <td class="numLineCover"> 39</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> Pattern INTEGER_PATTERN = Pattern.compile(<span class="string">"[0-9]+"</span>);</pre></td></tr> |
| <tr> <td class="numLine"> 40</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 41</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"> 42</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> = Logger.getLogger(PrebuiltTransforms.<span class="keyword">class</span>.getName());</pre></td></tr> |
| <tr> <td class="numLine"> 43</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 44</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// Prevent instantiation.</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 45</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">private</span> PrebuiltTransforms() {}</span></pre></td></tr> |
| <tr> <td class="numLine"> 46</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 47</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 48</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Returns a transform that copies metadata values from one key to another.</span></pre></td></tr> |
| <tr> <td class="numLine"> 49</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * The {@code "overwrite"} key can be set to {@code "true"} to cause the</span></pre></td></tr> |
| <tr> <td class="numLine"> 50</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * destination to be replaced; otherwise the destination key is supplemented.</span></pre></td></tr> |
| <tr> <td class="numLine"> 51</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 52</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p>Copies are defined by pairs of {@code "X.from"} and {@code "X.to"}</span></pre></td></tr> |
| <tr> <td class="numLine"> 53</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * configuration entries (where {@code X} is an integer). The value for each</span></pre></td></tr> |
| <tr> <td class="numLine"> 54</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * is a metadata key. Copies are applied in the increasing order of the</span></pre></td></tr> |
| <tr> <td class="numLine"> 55</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * integers.</span></pre></td></tr> |
| <tr> <td class="numLine"> 56</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 57</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p>Example configuration:</span></pre></td></tr> |
| <tr> <td class="numLine"> 58</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"> 59</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *3.from=colour</span></pre></td></tr> |
| <tr> <td class="numLine"> 60</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *3.to=color</span></pre></td></tr> |
| <tr> <td class="numLine"> 61</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *5.from=author</span></pre></td></tr> |
| <tr> <td class="numLine"> 62</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *5.to=contributors</code></pre></span></pre></td></tr> |
| <tr> <td class="numLine"> 63</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 64</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> DocumentTransform copyMetadata(Map<String, String> config) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 65</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"> 66</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> List<KeyPairing> copies = parseCopies(config);</pre></td></tr> |
| <tr> <td class="numLineCover"> 67</td> <td class="nbHitsCovered"><a title="Line 67: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 67: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (copies.isEmpty()) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 68</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"> 69</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 70</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"> 71</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 72</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 73</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 74</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Returns a transform that moves metadata values from one key to another.</span></pre></td></tr> |
| <tr> <td class="numLine"> 75</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * This method returns a transform that behaves identically to {@link</span></pre></td></tr> |
| <tr> <td class="numLine"> 76</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * #copyMetadata}, except that the source keys are removed. If the source key</span></pre></td></tr> |
| <tr> <td class="numLine"> 77</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * has no metadata values then the destination is left as-is.</span></pre></td></tr> |
| <tr> <td class="numLine"> 78</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 79</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> DocumentTransform moveMetadata(Map<String, String> config) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 80</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"> 81</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> List<KeyPairing> copies = parseCopies(config);</pre></td></tr> |
| <tr> <td class="numLineCover"> 82</td> <td class="nbHitsCovered"><a title="Line 82: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 82: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (copies.isEmpty()) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 83</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"> 84</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 85</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"> 86</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 87</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 88</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 89</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Pairs of keys, with a src-key-name and destination-key-name.</span></pre></td></tr> |
| <tr> <td class="numLine"> 90</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * The sequence is in order the copies/moves should happen.</span></pre></td></tr> |
| <tr> <td class="numLine"> 91</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 92</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> List<KeyPairing> parseCopies(Map<String, String> config) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 93</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"> 94</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"> 95</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"> 96</td> <td class="nbHitsCovered"><a title="Line 96: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 96: Conditional coverage 100% (2/2)."> : allSubs.entrySet()) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 97</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"> 98</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"> 99</td> <td class="nbHitsCovered"><a title="Line 99: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 12</a></td> <td class="src"><pre class="src"> <a title="Line 99: 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"> 100</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"> 101</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> instruction.getKey());</pre></td></tr> |
| <tr> <td class="numLineCover"> 102</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 103</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 104</td> <td class="nbHitsCovered"><a title="Line 104: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 104: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (from.equals(to)) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 105</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"> 106</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 107</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 108</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"> 109</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> copies.add(kp);</pre></td></tr> |
| <tr> <td class="numLineCover"> 110</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"> 111</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"> 112</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 113</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"> 114</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 115</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 116</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 117</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Splits configurations that start with number and period into</span></pre></td></tr> |
| <tr> <td class="numLine"> 118</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"> 119</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p></span></pre></td></tr> |
| <tr> <td class="numLine"> 120</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"> 121</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"> 122</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"> 123</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * this case).</span></pre></td></tr> |
| <tr> <td class="numLine"> 124</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 125</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> Map<Integer, Map<String, String>></pre></td></tr> |
| <tr> <td class="numLine"> 126</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> parseOrderedMaps(Map<String, String> config) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 127</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"> 128</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"> 129</td> <td class="nbHitsCovered"><a title="Line 129: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 129: 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"> 130</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"> 131</td> <td class="nbHitsCovered"><a title="Line 131: Conditional coverage 100% (2/2)."> 25</a></td> <td class="src"><pre class="src"> <a title="Line 131: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (parts.length != 2) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 132</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> log.log(Level.FINER,</pre></td></tr> |
| <tr> <td class="numLine"> 133</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"> 134</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 135</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 136</td> <td class="nbHitsCovered"><a title="Line 136: Conditional coverage 100% (2/2)."> 24</a></td> <td class="src"><pre class="src"> <a title="Line 136: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!INTEGER_PATTERN.matcher(parts[0]).matches()) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 137</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.FINER,</pre></td></tr> |
| <tr> <td class="numLine"> 138</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"> 139</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> me.getKey());</pre></td></tr> |
| <tr> <td class="numLineCover"> 140</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</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="numLineCover"> 142</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"> 143</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"> 144</td> <td class="nbHitsCovered"><a title="Line 144: Conditional coverage 100% (2/2)."> 22</a></td> <td class="src"><pre class="src"> <a title="Line 144: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (values == <span class="keyword">null</span>) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 145</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"> 146</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> numberedConfigs.put(i, values);</pre></td></tr> |
| <tr> <td class="numLine"> 147</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 148</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> values.put(parts[1], me.getValue());</pre></td></tr> |
| <tr> <td class="numLineCover"> 149</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 150</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"> 151</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 152</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 153</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"> 154</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"> 155</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"> 156</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"> 157</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 158</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> CopyTransform(List<KeyPairing> copies, <span class="keyword">boolean</span> overwrite,</pre></td></tr> |
| <tr> <td class="numLineCover"> 159</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"> 160</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"> 161</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"> 162</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"> 163</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"> 164</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 165</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 166</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> @Override</pre></td></tr> |
| <tr> <td class="numLine"> 167</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"> 168</td> <td class="nbHitsCovered"><a title="Line 168: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 168: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (KeyPairing kp : copies) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 169</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"> 170</td> <td class="nbHitsCovered"><a title="Line 170: Conditional coverage 100% (2/2)."> 8</a></td> <td class="src"><pre class="src"> <a title="Line 170: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (values.isEmpty()) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 171</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"> 172</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 173</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 174</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"> 175</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"> 176</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"> 177</td> <td class="nbHitsCovered"><a title="Line 177: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 177: 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"> 178</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"> 179</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"> 180</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"> 181</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> values.addAll(destValues);</pre></td></tr> |
| <tr> <td class="numLine"> 182</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 183</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> metadata.set(kp.dest, values);</pre></td></tr> |
| <tr> <td class="numLineCover"> 184</td> <td class="nbHitsCovered"><a title="Line 184: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 184: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (move) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 185</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"> 186</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"> 187</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 188</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 189</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 190</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 191</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> @Override</pre></td></tr> |
| <tr> <td class="numLine"> 192</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"> 193</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"> 194</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"> 195</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 196</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</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"> <span class="comment">/** Contains source and destination metadata key. */</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 199</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"> 200</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"> 201</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"> 202</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 203</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> KeyPairing(String from, String to) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 204</td> <td class="nbHitsUncovered"><a title="Line 204: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 8</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 204: 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"> 205</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"> 206</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } </pre></td></tr> |
| <tr> <td class="numLineCover"> 207</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> src = from;</pre></td></tr> |
| <tr> <td class="numLineCover"> 208</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> dest = to;</pre></td></tr> |
| <tr> <td class="numLineCover"> 209</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 210</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 211</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"> 212</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"> 213</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 214</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 215</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 216</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 217</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"> 218</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"> 219</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * integer).</span></pre></td></tr> |
| <tr> <td class="numLine"> 220</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 221</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"> 222</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"> 223</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"> 224</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 225</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> DocumentTransform deleteMetadata(Map<String, String> config) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 226</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"> 227</td> <td class="nbHitsCovered"><a title="Line 227: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 227: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (keys.isEmpty()) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 228</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"> 229</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 230</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"> 231</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 232</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 233</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"> 234</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> String prefix) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 235</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"> 236</td> <td class="nbHitsCovered"><a title="Line 236: Conditional coverage 100% (2/2)."> 5</a></td> <td class="src"><pre class="src"> <a title="Line 236: 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"> 237</td> <td class="nbHitsCovered"><a title="Line 237: Conditional coverage 100% (2/2)."> 16</a></td> <td class="src"><pre class="src"> <a title="Line 237: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!me.getKey().startsWith(prefix)) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 238</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</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="numLineCover"> 240</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"> 241</td> <td class="nbHitsCovered"><a title="Line 241: Conditional coverage 100% (2/2)."> 9</a></td> <td class="src"><pre class="src"> <a title="Line 241: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!INTEGER_PATTERN.matcher(number).matches()) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 242</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"> 243</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"> 244</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 245</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 246</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> keys.add(me.getValue());</pre></td></tr> |
| <tr> <td class="numLineCover"> 247</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 248</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"> 249</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 250</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 251</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="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"> 252</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"> 253</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 254</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"> 255</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"> 256</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 257</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 258</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> @Override</pre></td></tr> |
| <tr> <td class="numLine"> 259</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> transform(Metadata metadata, Map<String, String> params) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 260</td> <td class="nbHitsCovered"><a title="Line 260: Conditional coverage 100% (2/2)."> 1</a></td> <td class="src"><pre class="src"> <a title="Line 260: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String key : keys) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 261</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"> 262</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 263</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 264</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 265</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> @Override</pre></td></tr> |
| <tr> <td class="numLine"> 266</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"> 267</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"> 268</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 269</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 270</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 271</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 272</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"> 273</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"> 274</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"> 275</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"> 276</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"> 277</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"> 278</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 279</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"> 280</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"> 281</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"> 282</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"> 283</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"> 284</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"> 285</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 286</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"> 287</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"> 288</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *key1=favorite</span></pre></td></tr> |
| <tr> <td class="numLine"> 289</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"> 290</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"> 291</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"> 292</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 293</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"> 294</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"> 295</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"> 296</td> <td class="nbHitsCovered"><a title="Line 296: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 296: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (overwriteString != <span class="keyword">null</span>) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 297</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> overwrite = Boolean.parseBoolean(overwriteString);</pre></td></tr> |
| <tr> <td class="numLine"> 298</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 299</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"> 300</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"> 301</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"> 302</td> <td class="nbHitsCovered"><a title="Line 302: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 302: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (replacement == <span class="keyword">null</span>) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 303</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"> 304</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 305</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> Pattern toMatch;</pre></td></tr> |
| <tr> <td class="numLine"> 306</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> String replacementPattern;</pre></td></tr> |
| <tr> <td class="numLineCover"> 307</td> <td class="nbHitsCovered"><a title="Line 307: Conditional coverage 100% (2/2)."> 5</a></td> <td class="src"><pre class="src"> <a title="Line 307: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (string != <span class="keyword">null</span>) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 308</td> <td class="nbHitsCovered"><a title="Line 308: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 308: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (pattern != <span class="keyword">null</span>) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 309</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"> 310</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"> 311</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 312</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"> 313</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> replacementPattern = Matcher.quoteReplacement(replacement);</pre></td></tr> |
| <tr> <td class="numLineCover"> 314</td> <td class="nbHitsCovered"><a title="Line 314: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 314: 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"> 315</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> toMatch = Pattern.compile(pattern);</pre></td></tr> |
| <tr> <td class="numLineCover"> 316</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> replacementPattern = replacement;</pre></td></tr> |
| <tr> <td class="numLine"> 317</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr> |
| <tr> <td class="numLineCover"> 318</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"> 319</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"> 320</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 321</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 322</td> <td class="nbHitsCovered"> 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"> 323</td> <td class="nbHitsCovered"><a title="Line 323: Conditional coverage 100% (2/2)."> 3</a></td> <td class="src"><pre class="src"> <a title="Line 323: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (keys.isEmpty()) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 324</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"> 325</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 326</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"> 327</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 328</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 329</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <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"> 330</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"> 331</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"> 332</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"> 333</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"> 334</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 335</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> ReplaceTransform(Collection<String> keys, Pattern toMatch,</pre></td></tr> |
| <tr> <td class="numLineCover"> 336</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"> 337</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"> 338</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"> 339</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"> 340</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"> 341</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 342</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 343</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> @Override</pre></td></tr> |
| <tr> <td class="numLine"> 344</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"> 345</td> <td class="nbHitsCovered"><a title="Line 345: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 345: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String key : keys) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 346</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"> 347</td> <td class="nbHitsCovered"><a title="Line 347: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 347: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (original.isEmpty()) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 348</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"> 349</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 350</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 351</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"> 352</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"> 353</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"> 354</td> <td class="nbHitsCovered"><a title="Line 354: Conditional coverage 100% (2/2)."> 4</a></td> <td class="src"><pre class="src"> <a title="Line 354: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String value : original) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 355</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"> 356</td> <td class="nbHitsCovered"><a title="Line 356: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 356: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (overwrite) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 357</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> values.remove(value);</pre></td></tr> |
| <tr> <td class="numLine"> 358</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 359</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> values.add(newValue);</pre></td></tr> |
| <tr> <td class="numLineCover"> 360</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 361</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"> 362</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> metadata.set(key, values);</pre></td></tr> |
| <tr> <td class="numLineCover"> 363</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 364</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 365</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 366</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> @Override</pre></td></tr> |
| <tr> <td class="numLine"> 367</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"> 368</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"> 369</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"> 370</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 371</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 372</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</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> |