blob: 8712638034bb643de6f0ba798efd3e213765712e [file] [log] [blame]
<!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 - org.odftoolkit.odfdom.pkg.OdfPackage</h5>
<div class="separator">&nbsp;</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="org.odftoolkit.odfdom.pkg.OdfPackage.html">OdfPackage</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">86%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:86px"><span class="text">758/879</span></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:77px"><span class="text">315/406</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.65625;</span>3,656</td></tr>
<tr><td><a href="org.odftoolkit.odfdom.pkg.OdfPackage.html">OdfPackage$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/5</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.65625;</span>3,656</td></tr>
<tr><td><a href="org.odftoolkit.odfdom.pkg.OdfPackage.html">OdfPackage$2</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/9</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.65625;</span>3,656</td></tr>
<tr><td><a href="org.odftoolkit.odfdom.pkg.OdfPackage.html">OdfPackage$3</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:0px"><span class="text">0/10</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.65625;</span>3,656</td></tr>
<tr><td><a href="org.odftoolkit.odfdom.pkg.OdfPackage.html">OdfPackage$OdfFile</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">100%</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><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.65625;</span>3,656</td></tr>
</table>
<div class="separator">&nbsp;</div>
<table cellspacing="0" cellpadding="0" class="src">
<tr> <td class="numLine">&nbsp;1</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment">/************************************************************************</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;3</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;4</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;5</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;6</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;7</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Use is subject to license terms.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;8</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;9</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License"); you may not</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;10</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * use this file except in compliance with the License. You may obtain a copy</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;11</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * of the License at http://www.apache.org/licenses/LICENSE-2.0. You can also</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;12</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * obtain a copy of the License at http://odftoolkit.org/docs/license.txt</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;13</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;14</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;15</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;16</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;17</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;18</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * See the License for the specific language governing permissions and</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;19</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * limitations under the License.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;20</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;21</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> ************************************************************************/</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;22</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">package</span> org.odftoolkit.odfdom.pkg;</pre></td></tr>
<tr> <td class="numLine">&nbsp;23</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;24</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.BufferedInputStream;</pre></td></tr>
<tr> <td class="numLine">&nbsp;25</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.BufferedOutputStream;</pre></td></tr>
<tr> <td class="numLine">&nbsp;26</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.ByteArrayInputStream;</pre></td></tr>
<tr> <td class="numLine">&nbsp;27</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.ByteArrayOutputStream;</pre></td></tr>
<tr> <td class="numLine">&nbsp;28</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.Closeable;</pre></td></tr>
<tr> <td class="numLine">&nbsp;29</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.File;</pre></td></tr>
<tr> <td class="numLine">&nbsp;30</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.FileInputStream;</pre></td></tr>
<tr> <td class="numLine">&nbsp;31</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.FileOutputStream;</pre></td></tr>
<tr> <td class="numLine">&nbsp;32</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.IOException;</pre></td></tr>
<tr> <td class="numLine">&nbsp;33</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.InputStream;</pre></td></tr>
<tr> <td class="numLine">&nbsp;34</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.OutputStream;</pre></td></tr>
<tr> <td class="numLine">&nbsp;35</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.PipedInputStream;</pre></td></tr>
<tr> <td class="numLine">&nbsp;36</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.PipedOutputStream;</pre></td></tr>
<tr> <td class="numLine">&nbsp;37</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.UnsupportedEncodingException;</pre></td></tr>
<tr> <td class="numLine">&nbsp;38</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.lang.reflect.Constructor;</pre></td></tr>
<tr> <td class="numLine">&nbsp;39</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.net.URI;</pre></td></tr>
<tr> <td class="numLine">&nbsp;40</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.security.InvalidKeyException;</pre></td></tr>
<tr> <td class="numLine">&nbsp;41</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.security.MessageDigest;</pre></td></tr>
<tr> <td class="numLine">&nbsp;42</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.security.NoSuchAlgorithmException;</pre></td></tr>
<tr> <td class="numLine">&nbsp;43</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.security.SecureRandom;</pre></td></tr>
<tr> <td class="numLine">&nbsp;44</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.ArrayList;</pre></td></tr>
<tr> <td class="numLine">&nbsp;45</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.Arrays;</pre></td></tr>
<tr> <td class="numLine">&nbsp;46</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.HashMap;</pre></td></tr>
<tr> <td class="numLine">&nbsp;47</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.HashSet;</pre></td></tr>
<tr> <td class="numLine">&nbsp;48</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.Iterator;</pre></td></tr>
<tr> <td class="numLine">&nbsp;49</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.List;</pre></td></tr>
<tr> <td class="numLine">&nbsp;50</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.Map;</pre></td></tr>
<tr> <td class="numLine">&nbsp;51</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.Map.Entry;</pre></td></tr>
<tr> <td class="numLine">&nbsp;52</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.Set;</pre></td></tr>
<tr> <td class="numLine">&nbsp;53</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.StringTokenizer;</pre></td></tr>
<tr> <td class="numLine">&nbsp;54</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.TreeSet;</pre></td></tr>
<tr> <td class="numLine">&nbsp;55</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.logging.Level;</pre></td></tr>
<tr> <td class="numLine">&nbsp;56</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.logging.Logger;</pre></td></tr>
<tr> <td class="numLine">&nbsp;57</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.regex.Pattern;</pre></td></tr>
<tr> <td class="numLine">&nbsp;58</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.zip.CRC32;</pre></td></tr>
<tr> <td class="numLine">&nbsp;59</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.zip.Deflater;</pre></td></tr>
<tr> <td class="numLine">&nbsp;60</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.zip.Inflater;</pre></td></tr>
<tr> <td class="numLine">&nbsp;61</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.zip.ZipEntry;</pre></td></tr>
<tr> <td class="numLine">&nbsp;62</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.zip.ZipException;</pre></td></tr>
<tr> <td class="numLine">&nbsp;63</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.zip.ZipFile;</pre></td></tr>
<tr> <td class="numLine">&nbsp;64</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.zip.ZipOutputStream;</pre></td></tr>
<tr> <td class="numLine">&nbsp;65</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;66</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> javax.crypto.Cipher;</pre></td></tr>
<tr> <td class="numLine">&nbsp;67</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> javax.crypto.Mac;</pre></td></tr>
<tr> <td class="numLine">&nbsp;68</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> javax.crypto.spec.IvParameterSpec;</pre></td></tr>
<tr> <td class="numLine">&nbsp;69</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> javax.crypto.spec.SecretKeySpec;</pre></td></tr>
<tr> <td class="numLine">&nbsp;70</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> javax.xml.parsers.DocumentBuilder;</pre></td></tr>
<tr> <td class="numLine">&nbsp;71</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> javax.xml.parsers.DocumentBuilderFactory;</pre></td></tr>
<tr> <td class="numLine">&nbsp;72</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> javax.xml.parsers.ParserConfigurationException;</pre></td></tr>
<tr> <td class="numLine">&nbsp;73</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> javax.xml.parsers.SAXParser;</pre></td></tr>
<tr> <td class="numLine">&nbsp;74</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> javax.xml.parsers.SAXParserFactory;</pre></td></tr>
<tr> <td class="numLine">&nbsp;75</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> javax.xml.transform.TransformerConfigurationException;</pre></td></tr>
<tr> <td class="numLine">&nbsp;76</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> javax.xml.transform.TransformerException;</pre></td></tr>
<tr> <td class="numLine">&nbsp;77</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> javax.xml.transform.URIResolver;</pre></td></tr>
<tr> <td class="numLine">&nbsp;78</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;79</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.apache.xerces.dom.DOMXSImplementationSourceImpl;</pre></td></tr>
<tr> <td class="numLine">&nbsp;80</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.odftoolkit.odfdom.doc.OdfDocument;</pre></td></tr>
<tr> <td class="numLine">&nbsp;81</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.odftoolkit.odfdom.doc.OdfDocument.OdfMediaType;</pre></td></tr>
<tr> <td class="numLine">&nbsp;82</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.odftoolkit.odfdom.pkg.manifest.AlgorithmElement;</pre></td></tr>
<tr> <td class="numLine">&nbsp;83</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.odftoolkit.odfdom.pkg.manifest.EncryptionDataElement;</pre></td></tr>
<tr> <td class="numLine">&nbsp;84</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.odftoolkit.odfdom.pkg.manifest.FileEntryElement;</pre></td></tr>
<tr> <td class="numLine">&nbsp;85</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.odftoolkit.odfdom.pkg.manifest.KeyDerivationElement;</pre></td></tr>
<tr> <td class="numLine">&nbsp;86</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.odftoolkit.odfdom.pkg.manifest.ManifestElement;</pre></td></tr>
<tr> <td class="numLine">&nbsp;87</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.odftoolkit.odfdom.pkg.manifest.OdfFileEntry;</pre></td></tr>
<tr> <td class="numLine">&nbsp;88</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.odftoolkit.odfdom.pkg.manifest.OdfManifestDom;</pre></td></tr>
<tr> <td class="numLine">&nbsp;89</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.odftoolkit.odfdom.pkg.manifest.StartKeyGenerationElement;</pre></td></tr>
<tr> <td class="numLine">&nbsp;90</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.odftoolkit.odfdom.pkg.rdfa.Util;</pre></td></tr>
<tr> <td class="numLine">&nbsp;91</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.odftoolkit.odfdom.type.Base64Binary;</pre></td></tr>
<tr> <td class="numLine">&nbsp;92</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.w3c.dom.Document;</pre></td></tr>
<tr> <td class="numLine">&nbsp;93</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.w3c.dom.ls.DOMImplementationLS;</pre></td></tr>
<tr> <td class="numLine">&nbsp;94</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.w3c.dom.ls.LSOutput;</pre></td></tr>
<tr> <td class="numLine">&nbsp;95</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.w3c.dom.ls.LSSerializer;</pre></td></tr>
<tr> <td class="numLine">&nbsp;96</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.xml.sax.EntityResolver;</pre></td></tr>
<tr> <td class="numLine">&nbsp;97</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.xml.sax.ErrorHandler;</pre></td></tr>
<tr> <td class="numLine">&nbsp;98</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.xml.sax.InputSource;</pre></td></tr>
<tr> <td class="numLine">&nbsp;99</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.xml.sax.SAXException;</pre></td></tr>
<tr> <td class="numLine">&nbsp;100</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.xml.sax.SAXParseException;</pre></td></tr>
<tr> <td class="numLine">&nbsp;101</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.xml.sax.XMLReader;</pre></td></tr>
<tr> <td class="numLine">&nbsp;102</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;103</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;104</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * OdfPackage represents the package view to an OpenDocument document. The</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;105</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * OdfPackage will be created from an ODF document and represents a copy of the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;106</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * loaded document, where files can be inserted and deleted. The changes take</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;107</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * effect, when the OdfPackage is being made persisted by save().</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;108</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;109</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<span class="keyword">public</span> <span class="keyword">class</span> OdfPackage <span class="keyword">implements</span> Closeable {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;110</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;111</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Static parts of file references</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;112</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String DOUBLE_DOT = <span class="string">".."</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;113</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String DOT = <span class="string">"."</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;114</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String SLASH = <span class="string">"/"</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;115</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String COLON = <span class="string">":"</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;116</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String ENCODED_APOSTROPHE = <span class="string">"&amp;apos;"</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;117</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String ENCODED_QUOTATION = <span class="string">"&amp;quot;"</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;118</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String EMPTY_STRING = <span class="string">""</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;119</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String XML_MEDIA_TYPE = <span class="string">"text/xml"</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;120</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Search patterns to be used in RegEx expressions</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;121</td> <td class="nbHitsCovered">&nbsp;55</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Pattern BACK_SLASH_PATTERN = Pattern.compile(<span class="string">"\\\\"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;122</td> <td class="nbHitsCovered">&nbsp;55</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Pattern DOUBLE_SLASH_PATTERN = Pattern.compile(<span class="string">"//"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;123</td> <td class="nbHitsCovered">&nbsp;55</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Pattern QUOTATION_PATTERN = Pattern.compile(<span class="string">"\""</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;124</td> <td class="nbHitsCovered">&nbsp;55</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Pattern APOSTROPHE_PATTERN = Pattern.compile(<span class="string">"'"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;125</td> <td class="nbHitsCovered">&nbsp;55</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Pattern CONTROL_CHAR_PATTERN = Pattern.compile(<span class="string">"\\p{Cntrl}"</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;126</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> Set&lt;String&gt; mCompressedFileTypes;</pre></td></tr>
<tr> <td class="numLine">&nbsp;127</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// some well known streams inside ODF packages</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;128</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> String mMediaType;</pre></td></tr>
<tr> <td class="numLine">&nbsp;129</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> String mBaseURI;</pre></td></tr>
<tr> <td class="numLine">&nbsp;130</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> ZipHelper mZipFile;</pre></td></tr>
<tr> <td class="numLine">&nbsp;131</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> Resolver mResolver;</pre></td></tr>
<tr> <td class="numLine">&nbsp;132</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> Map&lt;String, ZipEntry&gt; mZipEntries;</pre></td></tr>
<tr> <td class="numLine">&nbsp;133</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> HashMap&lt;String, ZipEntry&gt; mOriginalZipEntries;</pre></td></tr>
<tr> <td class="numLine">&nbsp;134</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> Map&lt;String, OdfFileEntry&gt; mManifestEntries;</pre></td></tr>
<tr> <td class="numLine">&nbsp;135</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// All opened documents from the same package are cached (including the root</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;136</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// document)</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;137</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> Map&lt;String, OdfPackageDocument&gt; mPkgDocuments;</pre></td></tr>
<tr> <td class="numLine">&nbsp;138</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Three different incarnations of a package file/data</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;139</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// save() will check 1) mPkgDoms, 2) if not check mMemoryFileCache</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;140</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> HashMap&lt;String, Document&gt; mPkgDoms;</pre></td></tr>
<tr> <td class="numLine">&nbsp;141</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> HashMap&lt;String, <span class="keyword">byte</span>[]&gt; mMemoryFileCache;</pre></td></tr>
<tr> <td class="numLine">&nbsp;142</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;143</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> ErrorHandler mErrorHandler;</pre></td></tr>
<tr> <td class="numLine">&nbsp;144</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> String mManifestVersion;</pre></td></tr>
<tr> <td class="numLine">&nbsp;145</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> OdfManifestDom mManifestDom;</pre></td></tr>
<tr> <td class="numLine">&nbsp;146</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> String oldPwd;</pre></td></tr>
<tr> <td class="numLine">&nbsp;147</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> String newPwd;</pre></td></tr>
<tr> <td class="numLine">&nbsp;148</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;149</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/* Commonly used files within the ODF Package */</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;150</td> <td class="nbHitsCovered">&nbsp;7549</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> enum OdfFile {</pre></td></tr>
<tr> <td class="numLine">&nbsp;151</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;152</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;153</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * The image directory is not defined by the OpenDocument standard,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;154</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * nevertheless the most spread ODF application OpenOffice.org is using</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;155</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * the directory named "Pictures".</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;156</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;157</td> <td class="nbHitsCovered">&nbsp;54</td> <td class="src"><pre class="src">&nbsp; IMAGE_DIRECTORY(<span class="string">"Pictures"</span>),</pre></td></tr>
<tr> <td class="numLine">&nbsp;158</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;159</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * The "META-INF/manifest.xml" file is defined by the ODF 1.2 part 3</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;160</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Package specification. This manifest is the 'content table' of the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;161</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * ODF package and describes the file entries of the ZIP including</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;162</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * directories, but should not contain empty directories.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;163</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;164</td> <td class="nbHitsCovered">&nbsp;54</td> <td class="src"><pre class="src">&nbsp; MANIFEST(<span class="string">"META-INF/manifest.xml"</span>),</pre></td></tr>
<tr> <td class="numLine">&nbsp;165</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;166</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * The "mimetype" file is defined by the ODF 1.2 part 3 Package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;167</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * specification. It contains the mediatype string of the root document</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;168</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * and must be the first file in the ZIP and must not be compressed.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;169</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;170</td> <td class="nbHitsCovered">&nbsp;54</td> <td class="src"><pre class="src">&nbsp; MEDIA_TYPE(<span class="string">"mimetype"</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;171</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">final</span> String internalPath;</pre></td></tr>
<tr> <td class="numLine">&nbsp;172</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;173</td> <td class="nbHitsCovered">&nbsp;162</td> <td class="src"><pre class="src">&nbsp; OdfFile(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;174</td> <td class="nbHitsCovered">&nbsp;162</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">this</span>.internalPath = internalPath;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;175</td> <td class="nbHitsCovered">&nbsp;162</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;176</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;177</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> String getPath() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;178</td> <td class="nbHitsCovered">&nbsp;29733</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> internalPath;</pre></td></tr>
<tr> <td class="numLine">&nbsp;179</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;180</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;181</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;182</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">static</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;183</td> <td class="nbHitsCovered">&nbsp;55</td> <td class="src"><pre class="src">&nbsp; mCompressedFileTypes = <span class="keyword">new</span> HashSet&lt;String&gt;();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;184</td> <td class="nbHitsCovered">&nbsp;55</td> <td class="src"><pre class="src">&nbsp; String[] typelist = <span class="keyword">new</span> String[] { <span class="string">"jpg"</span>, <span class="string">"gif"</span>, <span class="string">"png"</span>, <span class="string">"zip"</span>, <span class="string">"rar"</span>, <span class="string">"jpeg"</span>, <span class="string">"mpe"</span>, <span class="string">"mpg"</span>, <span class="string">"mpeg"</span>, <span class="string">"mpeg4"</span>, <span class="string">"mp4"</span>, <span class="string">"7z"</span>, <span class="string">"ari"</span>, <span class="string">"arj"</span>, <span class="string">"jar"</span>, <span class="string">"gz"</span>, <span class="string">"tar"</span>, <span class="string">"war"</span>, <span class="string">"mov"</span>, <span class="string">"avi"</span> };</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;185</td> <td class="nbHitsCovered">&nbsp;55</td> <td class="src"><pre class="src">&nbsp; mCompressedFileTypes.addAll(Arrays.asList(typelist));</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;186</td> <td class="nbHitsCovered">&nbsp;55</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;187</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;188</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;189</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Creates the ODFPackage as an empty Package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;190</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;191</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> OdfPackage() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;192</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; mMediaType = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;193</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; mResolver = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;194</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; mPkgDocuments = <span class="keyword">new</span> HashMap&lt;String, OdfPackageDocument&gt;();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;195</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; mPkgDoms = <span class="keyword">new</span> HashMap&lt;String, Document&gt;();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;196</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; mMemoryFileCache = <span class="keyword">new</span> HashMap&lt;String, <span class="keyword">byte</span>[]&gt;();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;197</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; mManifestEntries = <span class="keyword">new</span> HashMap&lt;String, OdfFileEntry&gt;();</pre></td></tr>
<tr> <td class="numLine">&nbsp;198</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// specify whether validation should be enabled and what SAX</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;199</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// ErrorHandler should be used.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;200</td> <td class="nbHitsUncovered"><a title="Line 200: Conditional coverage 50% (1/2).">&nbsp;564</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 200: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (mErrorHandler == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;201</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; String errorHandlerProperty = System.getProperty(<span class="string">"org.odftoolkit.odfdom.validation"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;202</td> <td class="nbHitsUncovered"><a title="Line 202: Conditional coverage 50% (1/2).">&nbsp;564</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 202: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (errorHandlerProperty != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;203</td> <td class="nbHitsUncovered"><a title="Line 203: Conditional coverage 50% (1/2).">&nbsp;564</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 203: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (errorHandlerProperty.equalsIgnoreCase(<span class="string">"true"</span>)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;204</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mErrorHandler = <span class="keyword">new</span> DefaultErrorHandler();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;205</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).info(<span class="string">"Activated validation with default ErrorHandler!"</span>);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;206</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;207</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;208</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; Class cl = Class.forName(errorHandlerProperty);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;209</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; Constructor ctor = cl.getDeclaredConstructor(<span class="keyword">new</span> Class[] {});</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;210</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; mErrorHandler = (ErrorHandler) ctor.newInstance();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;211</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.CONFIG, <span class="string">"Activated validation with ErrorHandler:''{0}''!"</span>, errorHandlerProperty);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;212</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;213</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="string">"Could not initiate validation with the given ErrorHandler: '"</span> + errorHandlerProperty + <span class="string">"'"</span>, ex);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;214</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;215</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;216</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;217</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;218</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;219</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;220</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;221</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Creates an OdfPackage from the OpenDocument provided by a File.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;222</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;223</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * OdfPackage relies on the file being available for read access over the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;224</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * whole lifecycle of OdfPackage.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;225</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;/p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;226</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;227</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param pkgFile</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;228</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - a file representing the ODF document</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;229</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param baseURI</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;230</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * defining the base URI of ODF package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;231</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param password</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;232</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * defining the password of ODF package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;233</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param errorHandler</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;234</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - SAX ErrorHandler used for ODF validation</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;235</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @see #getErrorHandler</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;236</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;237</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - if the package could not be created</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;238</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @see #getErrorHandler*</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;239</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;240</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> OdfPackage(File pkgFile, String baseURI, String password, ErrorHandler errorHandler) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;241</td> <td class="nbHitsCovered">&nbsp;360</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">this</span>();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;242</td> <td class="nbHitsCovered">&nbsp;360</td> <td class="src"><pre class="src">&nbsp; mBaseURI = getBaseURLFromFile(pkgFile);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;243</td> <td class="nbHitsCovered">&nbsp;360</td> <td class="src"><pre class="src">&nbsp; mErrorHandler = errorHandler;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;244</td> <td class="nbHitsCovered">&nbsp;360</td> <td class="src"><pre class="src">&nbsp; oldPwd = password;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;245</td> <td class="nbHitsCovered">&nbsp;360</td> <td class="src"><pre class="src">&nbsp; newPwd = oldPwd;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;246</td> <td class="nbHitsCovered">&nbsp;360</td> <td class="src"><pre class="src">&nbsp; mBaseURI = baseURI;</pre></td></tr>
<tr> <td class="numLine">&nbsp;247</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;248</td> <td class="nbHitsCovered">&nbsp;360</td> <td class="src"><pre class="src">&nbsp; InputStream packageStream = <span class="keyword">new</span> FileInputStream(pkgFile);</pre></td></tr>
<tr> <td class="numLine">&nbsp;249</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;250</td> <td class="nbHitsCovered">&nbsp;360</td> <td class="src"><pre class="src">&nbsp; initializeZip(packageStream);</pre></td></tr>
<tr> <td class="numLine">&nbsp;251</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">finally</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;252</td> <td class="nbHitsCovered">&nbsp;360</td> <td class="src"><pre class="src">&nbsp; close(packageStream);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;253</td> <td class="nbHitsCovered">&nbsp;354</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;254</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;255</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// initializeZip(pkgFile);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;256</td> <td class="nbHitsCovered">&nbsp;354</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;257</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;258</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;259</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Creates an OdfPackage from the OpenDocument provided by a InputStream.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;260</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;261</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Since an InputStream does not provide the arbitrary (non sequentiell)</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;262</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * read access needed by OdfPackage, the InputStream is cached. This usually</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;263</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * takes more time compared to the other constructors.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;264</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;/p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;265</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;266</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param packageStream</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;267</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - an inputStream representing the ODF package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;268</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param baseURI</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;269</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * defining the base URI of ODF package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;270</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param password</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;271</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * defining the password of ODF package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;272</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param errorHandler</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;273</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - SAX ErrorHandler used for ODF validation</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;274</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @see #getErrorHandler</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;275</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;276</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - if the package could not be created</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;277</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @see #getErrorHandler*</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;278</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;279</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> OdfPackage(InputStream packageStream, String baseURI, String password, ErrorHandler errorHandler) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;280</td> <td class="nbHitsCovered">&nbsp;204</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">this</span>(); <span class="comment">// calling private constructor</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;281</td> <td class="nbHitsCovered">&nbsp;204</td> <td class="src"><pre class="src">&nbsp; mErrorHandler = errorHandler;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;282</td> <td class="nbHitsCovered">&nbsp;204</td> <td class="src"><pre class="src">&nbsp; mBaseURI = baseURI;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;283</td> <td class="nbHitsCovered">&nbsp;204</td> <td class="src"><pre class="src">&nbsp; oldPwd = password;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;284</td> <td class="nbHitsCovered">&nbsp;204</td> <td class="src"><pre class="src">&nbsp; newPwd = oldPwd;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;285</td> <td class="nbHitsCovered">&nbsp;204</td> <td class="src"><pre class="src">&nbsp; initializeZip(packageStream);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;286</td> <td class="nbHitsCovered">&nbsp;202</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;287</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;288</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;289</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Loads an OdfPackage from the given documentURL.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;290</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;291</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * OdfPackage relies on the file being available for read access over the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;292</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * whole lifecycle of OdfPackage.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;293</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;/p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;294</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;295</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param path</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;296</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - the documentURL to the ODF package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;297</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return the OpenDocument document represented as an OdfPackage</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;298</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;299</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - if the package could not be loaded</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;300</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;301</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">static</span> OdfPackage loadPackage(String path) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;302</td> <td class="nbHitsCovered">&nbsp;337</td> <td class="src"><pre class="src">&nbsp; File pkgFile = <span class="keyword">new</span> File(path);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;303</td> <td class="nbHitsCovered">&nbsp;337</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">new</span> OdfPackage(pkgFile, getBaseURLFromFile(pkgFile), <span class="keyword">null</span>, <span class="keyword">null</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;304</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;305</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;306</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;307</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Loads an OdfPackage from the OpenDocument provided by a File.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;308</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;309</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * OdfPackage relies on the file being available for read access over the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;310</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * whole lifecycle of OdfPackage.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;311</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;/p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;312</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;313</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param pkgFile</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;314</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - the ODF Package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;315</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return the OpenDocument document represented as an OdfPackage</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;316</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;317</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - if the package could not be loaded</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;318</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;319</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">static</span> OdfPackage loadPackage(File pkgFile) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;320</td> <td class="nbHitsCovered">&nbsp;14</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">new</span> OdfPackage(pkgFile, getBaseURLFromFile(pkgFile), <span class="keyword">null</span>, <span class="keyword">null</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;321</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;322</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;323</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;324</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Creates an OdfPackage from the given InputStream.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;325</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;326</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Since an InputStream does not provide the arbitrary (non sequentiell)</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;327</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * read access needed by OdfPackage, the InputStream is cached. This usually</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;328</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * takes more time compared to the other loadPackage methods.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;329</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;/p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;330</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;331</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param packageStream</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;332</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - an inputStream representing the ODF package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;333</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return the OpenDocument document represented as an OdfPackage</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;334</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;335</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - if the package could not be loaded</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;336</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;337</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">static</span> OdfPackage loadPackage(InputStream packageStream) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;338</td> <td class="nbHitsCovered">&nbsp;203</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">new</span> OdfPackage(packageStream, <span class="keyword">null</span>, <span class="keyword">null</span>, <span class="keyword">null</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;339</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;340</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;341</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;342</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Creates an OdfPackage from the given InputStream.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;343</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;344</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * OdfPackage relies on the file being available for read access over the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;345</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * whole lifecycle of OdfPackage.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;346</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;/p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;347</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;348</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param packageStream</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;349</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - an inputStream representing the ODF package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;350</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param baseURI</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;351</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * allows to explicitly set the base URI from the document, As</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;352</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * the URL can not be derived from a stream. In addition it is</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;353</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * possible to set the baseURI to any arbitrary URI, e.g. an URN.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;354</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * One usage of the baseURI to describe the source of validation</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;355</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * exception thrown by the ErrorHandler.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;356</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param errorHandler</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;357</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - SAX ErrorHandler used for ODF validation</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;358</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;359</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - if the package could not be created</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;360</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @see #getErrorHandler</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;361</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;362</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">static</span> OdfPackage loadPackage(InputStream packageStream, String baseURI, ErrorHandler errorHandler) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;363</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">new</span> OdfPackage(packageStream, baseURI, <span class="keyword">null</span>, errorHandler);</pre></td></tr>
<tr> <td class="numLine">&nbsp;364</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;365</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;366</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;367</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Loads an OdfPackage from the given File.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;368</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;369</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * OdfPackage relies on the file being available for read access over the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;370</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * whole lifecycle of OdfPackage.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;371</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;/p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;372</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;373</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param pkgFile</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;374</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - the ODF Package. A baseURL is being generated based on its</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;375</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * location.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;376</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param errorHandler</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;377</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - SAX ErrorHandler used for ODF validation.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;378</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;379</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - if the package could not be created</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;380</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @see #getErrorHandler</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;381</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;382</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">static</span> OdfPackage loadPackage(File pkgFile, ErrorHandler errorHandler) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;383</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">new</span> OdfPackage(pkgFile, getBaseURLFromFile(pkgFile), <span class="keyword">null</span>, errorHandler);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;384</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;385</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;386</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;387</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Loads an OdfPackage from the given File.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;388</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;389</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * OdfPackage relies on the file being available for read access over the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;390</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * whole lifecycle of OdfPackage.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;391</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;/p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;392</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;393</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param pkgFile</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;394</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - the ODF Package. A baseURL is being generated based on its</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;395</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * location.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;396</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param password</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;397</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - the ODF Package password.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;398</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param errorHandler</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;399</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - SAX ErrorHandler used for ODF validation.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;400</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;401</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - if the package could not be created</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;402</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @see #getErrorHandler</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;403</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;404</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">static</span> OdfPackage loadPackage(File pkgFile, String password, ErrorHandler errorHandler) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;405</td> <td class="nbHitsCovered">&nbsp;9</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">new</span> OdfPackage(pkgFile, getBaseURLFromFile(pkgFile), password, errorHandler);</pre></td></tr>
<tr> <td class="numLine">&nbsp;406</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;407</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;408</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Initialize using memory</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;409</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> initializeZip(InputStream odfStream) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;410</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; ByteArrayOutputStream tempBuf = <span class="keyword">new</span> ByteArrayOutputStream();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;411</td> <td class="nbHitsCovered">&nbsp;564</td> <td class="src"><pre class="src">&nbsp; StreamHelper.transformStream(odfStream, tempBuf);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;412</td> <td class="nbHitsCovered">&nbsp;563</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] mTempByteBuf = tempBuf.toByteArray();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;413</td> <td class="nbHitsCovered">&nbsp;563</td> <td class="src"><pre class="src">&nbsp; tempBuf.close();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;414</td> <td class="nbHitsCovered"><a title="Line 414: Conditional coverage 100% (2/2).">&nbsp;563</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 414: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mTempByteBuf.length &lt; 3) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;415</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; OdfValidationException ve = <span class="keyword">new</span> OdfValidationException(OdfPackageConstraint.PACKAGE_IS_NO_ZIP, getBaseURI());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;416</td> <td class="nbHitsUncovered"><a title="Line 416: Conditional coverage 50% (1/2).">&nbsp;1</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 416: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (mErrorHandler != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;417</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mErrorHandler.fatalError(ve);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;418</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;419</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(ve);</pre></td></tr>
<tr> <td class="numLine">&nbsp;420</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;421</td> <td class="nbHitsCovered">&nbsp;562</td> <td class="src"><pre class="src">&nbsp; mZipFile = <span class="keyword">new</span> ZipHelper(<span class="keyword">this</span>, mTempByteBuf);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;422</td> <td class="nbHitsCovered">&nbsp;562</td> <td class="src"><pre class="src">&nbsp; readZip();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;423</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;424</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;425</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// // Initialize using ZipFile</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;426</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// private void initializeZip(File pkgFile) throws Exception {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;427</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// try {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;428</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// mZipFile = new ZipHelper(this, new ZipFile(pkgFile));</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;429</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// } catch (ZipException ze) {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;430</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// OdfValidationException ve = new</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;431</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// OdfValidationException(OdfPackageConstraint.PACKAGE_IS_NO_ZIP,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;432</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// getBaseURI());</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;433</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if (mErrorHandler != null) {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;434</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// mErrorHandler.fatalError(ve);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;435</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;436</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// throw new IllegalArgumentException(ve);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;437</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;438</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// readZip();</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;439</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;440</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;441</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> readZip() <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;442</td> <td class="nbHitsCovered">&nbsp;562</td> <td class="src"><pre class="src">&nbsp; mZipEntries = <span class="keyword">new</span> HashMap&lt;String, ZipEntry&gt;();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;443</td> <td class="nbHitsCovered">&nbsp;562</td> <td class="src"><pre class="src">&nbsp; String firstEntryName = mZipFile.entriesToMap(mZipEntries);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;444</td> <td class="nbHitsCovered"><a title="Line 444: Conditional coverage 100% (2/2).">&nbsp;562</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 444: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mZipEntries.isEmpty()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;445</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; OdfValidationException ve = <span class="keyword">new</span> OdfValidationException(OdfPackageConstraint.PACKAGE_IS_NO_ZIP, getBaseURI());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;446</td> <td class="nbHitsCovered"><a title="Line 446: Conditional coverage 100% (2/2).">&nbsp;5</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 446: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mErrorHandler != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;447</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; mErrorHandler.fatalError(ve);</pre></td></tr>
<tr> <td class="numLine">&nbsp;448</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;449</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(ve);</pre></td></tr>
<tr> <td class="numLine">&nbsp;450</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;451</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// initialize the files of the package (fileEnties of Manifest)</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;452</td> <td class="nbHitsCovered">&nbsp;557</td> <td class="src"><pre class="src">&nbsp; parseManifest();</pre></td></tr>
<tr> <td class="numLine">&nbsp;453</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;454</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// initialize the package media type</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;455</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; initializeMediaType(firstEntryName);</pre></td></tr>
<tr> <td class="numLine">&nbsp;456</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;457</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// ToDo: Remove all META-INF/* files from the fileEntries of</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;458</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Manifest</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;459</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; mOriginalZipEntries = <span class="keyword">new</span> HashMap&lt;String, ZipEntry&gt;();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;460</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; mOriginalZipEntries.putAll(mZipEntries);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;461</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; mZipEntries.remove(OdfPackage.OdfFile.MEDIA_TYPE.getPath());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;462</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; mZipEntries.remove(OdfPackage.OdfFile.MANIFEST.getPath());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;463</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; mZipEntries.remove(<span class="string">"META-INF/"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;464</td> <td class="nbHitsCovered"><a title="Line 464: Conditional coverage 100% (2/2).">&nbsp;556</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 464: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mErrorHandler != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;465</td> <td class="nbHitsCovered">&nbsp;6</td> <td class="src"><pre class="src">&nbsp; validateManifest();</pre></td></tr>
<tr> <td class="numLine">&nbsp;466</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;467</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; Iterator&lt;String&gt; zipPaths = mZipEntries.keySet().iterator();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;468</td> <td class="nbHitsCovered"><a title="Line 468: Conditional coverage 100% (2/2).">&nbsp;4784</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 468: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (zipPaths.hasNext()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;469</td> <td class="nbHitsCovered">&nbsp;4228</td> <td class="src"><pre class="src">&nbsp; String internalPath = zipPaths.next();</pre></td></tr>
<tr> <td class="numLine">&nbsp;470</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// every resource aside the /META-INF/manifest.xml (and</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;471</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// META-INF/ directory)</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;472</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// and "mimetype" will be added as fileEntry</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;473</td> <td class="nbHitsUncovered"><a title="Line 473: Conditional coverage 50% (3/6) [each condition: 50%, 50%, 50%].">&nbsp;4228</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 473: Conditional coverage 50% (3/6) [each condition: 50%, 50%, 50%]."> <span class="keyword">if</span> (!internalPath.equals(OdfPackage.OdfFile.MANIFEST.getPath()) &amp;&amp; !internalPath.equals(<span class="string">"META-INF/"</span>) &amp;&amp; !internalPath.equals(OdfPackage.OdfFile.MEDIA_TYPE.getPath())) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;474</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// aside "mediatype" and "META-INF/manifest"</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;475</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// add manifest entry as to be described by a</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;476</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// &lt;manifest:file-entry&gt;</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;477</td> <td class="nbHitsCovered">&nbsp;4228</td> <td class="src"><pre class="src">&nbsp; ensureFileEntryExistence(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;478</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;479</td> <td class="nbHitsCovered">&nbsp;4228</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;480</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;481</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;482</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;483</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;484</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Validates if all file entries exist in the ZIP and vice versa</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;485</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;486</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws SAXException</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;487</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;488</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> validateManifest() <span class="keyword">throws</span> SAXException {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;489</td> <td class="nbHitsCovered">&nbsp;6</td> <td class="src"><pre class="src">&nbsp; Set zipPaths = mZipEntries.keySet();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;490</td> <td class="nbHitsCovered">&nbsp;6</td> <td class="src"><pre class="src">&nbsp; Set manifestPaths = mManifestEntries.keySet();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;491</td> <td class="nbHitsCovered">&nbsp;6</td> <td class="src"><pre class="src">&nbsp; Set&lt;String&gt; sharedPaths = <span class="keyword">new</span> HashSet&lt;String&gt;(zipPaths);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;492</td> <td class="nbHitsCovered">&nbsp;6</td> <td class="src"><pre class="src">&nbsp; sharedPaths.retainAll(manifestPaths);</pre></td></tr>
<tr> <td class="numLine">&nbsp;493</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;494</td> <td class="nbHitsCovered"><a title="Line 494: Conditional coverage 100% (2/2).">&nbsp;6</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 494: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (sharedPaths.size() &lt; zipPaths.size()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;495</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; Set&lt;String&gt; zipPathSuperset = <span class="keyword">new</span> HashSet&lt;String&gt;(mZipEntries.keySet());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;496</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; zipPathSuperset.removeAll(sharedPaths);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;497</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; Set sortedSet = <span class="keyword">new</span> TreeSet&lt;String&gt;(zipPathSuperset);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;498</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; Iterator iter = sortedSet.iterator();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;499</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; String documentURL = getBaseURI();</pre></td></tr>
<tr> <td class="numLine">&nbsp;500</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; String internalPath;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;501</td> <td class="nbHitsCovered"><a title="Line 501: Conditional coverage 100% (2/2).">&nbsp;4</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 501: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (iter.hasNext()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;502</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; internalPath = (String) iter.next();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;503</td> <td class="nbHitsUncovered"><a title="Line 503: Conditional coverage 50% (1/2).">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 503: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!internalPath.endsWith(SLASH)) { <span class="comment">// not for directories!</span></a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;504</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; logValidationError(OdfPackageConstraint.MANIFEST_DOES_NOT_LIST_FILE, documentURL, internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;505</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;506</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;507</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;508</td> <td class="nbHitsCovered"><a title="Line 508: Conditional coverage 100% (2/2).">&nbsp;6</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 508: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (sharedPaths.size() &lt; manifestPaths.size()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;509</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; Set&lt;String&gt; zipPathSubset = <span class="keyword">new</span> HashSet&lt;String&gt;(mManifestEntries.keySet());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;510</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; zipPathSubset.removeAll(sharedPaths);</pre></td></tr>
<tr> <td class="numLine">&nbsp;511</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// removing root directory</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;512</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; zipPathSubset.remove(SLASH);</pre></td></tr>
<tr> <td class="numLine">&nbsp;513</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;514</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// No directory are listed in a ZIP removing all directory with</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;515</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// content</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;516</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; Iterator&lt;String&gt; manifestOnlyPaths = zipPathSubset.iterator();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;517</td> <td class="nbHitsCovered"><a title="Line 517: Conditional coverage 100% (2/2).">&nbsp;84</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 517: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (manifestOnlyPaths.hasNext()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;518</td> <td class="nbHitsCovered">&nbsp;79</td> <td class="src"><pre class="src">&nbsp; String manifestOnlyPath = manifestOnlyPaths.next();</pre></td></tr>
<tr> <td class="numLine">&nbsp;519</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// assumption: all directories end with slash</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;520</td> <td class="nbHitsCovered"><a title="Line 520: Conditional coverage 100% (2/2).">&nbsp;79</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 520: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (manifestOnlyPath.endsWith(SLASH)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;521</td> <td class="nbHitsCovered">&nbsp;69</td> <td class="src"><pre class="src">&nbsp; removeDirectory(manifestOnlyPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;522</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;523</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if it is a nonexistent file</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;524</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; logValidationError(OdfPackageConstraint.MANIFEST_LISTS_NONEXISTENT_FILE, getBaseURI(), manifestOnlyPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;525</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; mManifestEntries.remove(manifestOnlyPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;526</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;527</td> <td class="nbHitsCovered">&nbsp;79</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;528</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;529</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// remove none document directories</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;530</td> <td class="nbHitsCovered">&nbsp;6</td> <td class="src"><pre class="src">&nbsp; Iterator&lt;String&gt; sharedPathsIter = sharedPaths.iterator();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;531</td> <td class="nbHitsCovered"><a title="Line 531: Conditional coverage 100% (2/2).">&nbsp;99</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 531: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (sharedPathsIter.hasNext()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;532</td> <td class="nbHitsCovered">&nbsp;93</td> <td class="src"><pre class="src">&nbsp; String sharedPath = sharedPathsIter.next();</pre></td></tr>
<tr> <td class="numLine">&nbsp;533</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// assumption: all directories end with slash</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;534</td> <td class="nbHitsCovered"><a title="Line 534: Conditional coverage 100% (2/2).">&nbsp;93</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 534: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (sharedPath.endsWith(SLASH)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;535</td> <td class="nbHitsCovered">&nbsp;8</td> <td class="src"><pre class="src">&nbsp; removeDirectory(sharedPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;536</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;537</td> <td class="nbHitsCovered">&nbsp;93</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;538</td> <td class="nbHitsCovered">&nbsp;6</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;539</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;540</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;541</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Removes directories without a mimetype (all none documents)</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;542</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;543</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws SAXException</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;544</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;545</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> removeDirectory(String path) <span class="keyword">throws</span> SAXException {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;546</td> <td class="nbHitsUncovered"><a title="Line 546: Conditional coverage 50% (1/2).">&nbsp;77</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 546: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (path.endsWith(SLASH)) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;547</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Check if it is a sub-document?</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;548</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Our assumption: it is a document if it has a mimetype...</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;549</td> <td class="nbHitsCovered">&nbsp;77</td> <td class="src"><pre class="src">&nbsp; String dirMimeType = mManifestEntries.get(path).getMediaTypeString();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;550</td> <td class="nbHitsUncovered"><a title="Line 550: Conditional coverage 75% (3/4) [each condition: 50%, 100%].">&nbsp;77</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 550: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> <span class="keyword">if</span> (dirMimeType == <span class="keyword">null</span> || EMPTY_STRING.equals(dirMimeType)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;551</td> <td class="nbHitsCovered">&nbsp;61</td> <td class="src"><pre class="src">&nbsp; logValidationWarning(OdfPackageConstraint.MANIFEST_LISTS_DIRECTORY, getBaseURI(), path);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;552</td> <td class="nbHitsCovered">&nbsp;61</td> <td class="src"><pre class="src">&nbsp; OdfFileEntry manifestEntry = mManifestEntries.remove(path);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;553</td> <td class="nbHitsCovered">&nbsp;61</td> <td class="src"><pre class="src">&nbsp; FileEntryElement manifestEle = manifestEntry.getOdfElement();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;554</td> <td class="nbHitsCovered">&nbsp;61</td> <td class="src"><pre class="src">&nbsp; manifestEle.getParentNode().removeChild(manifestEle);</pre></td></tr>
<tr> <td class="numLine">&nbsp;555</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;556</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;557</td> <td class="nbHitsCovered">&nbsp;77</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;558</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;559</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;560</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Reads the uncompressed "mimetype" file, which contains the package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;561</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * media/mimte type</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;562</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;563</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws SAXException</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;564</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;565</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> initializeMediaType(String firstEntryName) <span class="keyword">throws</span> SAXException {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;566</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; ZipEntry mimetypeEntry = mZipEntries.get(OdfPackage.OdfFile.MEDIA_TYPE.getPath());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;567</td> <td class="nbHitsCovered"><a title="Line 567: Conditional coverage 100% (2/2).">&nbsp;556</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 567: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mimetypeEntry != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;568</td> <td class="nbHitsCovered"><a title="Line 568: Conditional coverage 100% (2/2).">&nbsp;552</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 568: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mErrorHandler != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;569</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; validateMimeTypeEntry(mimetypeEntry, firstEntryName);</pre></td></tr>
<tr> <td class="numLine">&nbsp;570</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;571</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// get mediatype value of the root document/package from the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;572</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// mediatype file stream</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;573</td> <td class="nbHitsCovered">&nbsp;552</td> <td class="src"><pre class="src">&nbsp; String entryMediaType = getMediaTypeFromEntry(mimetypeEntry);</pre></td></tr>
<tr> <td class="numLine">&nbsp;574</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// get mediatype value of the root document/package from the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;575</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// manifest.xml</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;576</td> <td class="nbHitsCovered">&nbsp;552</td> <td class="src"><pre class="src">&nbsp; String manifestMediaType = getMediaTypeFromManifest();</pre></td></tr>
<tr> <td class="numLine">&nbsp;577</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if a valid mediatype was set by the "mimetype" file</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;578</td> <td class="nbHitsUncovered"><a title="Line 578: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;552</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 578: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (entryMediaType != <span class="keyword">null</span> &amp;&amp; !entryMediaType.equals(EMPTY_STRING)) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;579</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// the root document's mediatype is taken from the "mimetype"</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;580</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// file</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;581</td> <td class="nbHitsCovered">&nbsp;552</td> <td class="src"><pre class="src">&nbsp; mMediaType = entryMediaType;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;582</td> <td class="nbHitsCovered"><a title="Line 582: Conditional coverage 100% (2/2).">&nbsp;552</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 582: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mErrorHandler != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;583</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if the "mediatype" does exist, the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;584</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// "/META-INF/manifest.xml" have to contain a MIMETYPE for</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;585</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// the root document);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;586</td> <td class="nbHitsUncovered"><a title="Line 586: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 586: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (manifestMediaType != <span class="keyword">null</span> &amp;&amp; !manifestMediaType.equals(EMPTY_STRING)) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;587</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if the two media-types are inconsistent</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;588</td> <td class="nbHitsCovered"><a title="Line 588: Conditional coverage 100% (2/2).">&nbsp;3</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 588: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!entryMediaType.equals(manifestMediaType)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;589</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; logValidationError(OdfPackageConstraint.MIMETYPE_DIFFERS_FROM_PACKAGE, getBaseURI(), CONTROL_CHAR_PATTERN.matcher(mMediaType).replaceAll(EMPTY_STRING), manifestMediaType);</pre></td></tr>
<tr> <td class="numLine">&nbsp;590</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;591</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> { <span class="comment">// if "mimetype" file exists, there have to be a</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;592</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// mimetype in the manifest.xml for the root</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;593</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// document (see ODF 1.2 part 3)</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;594</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; logValidationError(OdfPackageConstraint.MIMETYPE_WITHOUT_MANIFEST_MEDIATYPE, getBaseURI(), CONTROL_CHAR_PATTERN.matcher(mMediaType).replaceAll(EMPTY_STRING), manifestMediaType);</pre></td></tr>
<tr> <td class="numLine">&nbsp;595</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;596</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;597</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> { <span class="comment">// if there is no media-type was set by the "mimetype" file</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;598</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// try as fall-back the mediatype of the root document from the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;599</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// manifest.xml</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;600</td> <td class="nbHitsUncovered"><a title="Line 600: Conditional coverage 0% (0/4) [each condition: 0%, 0%].">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 600: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">if</span> (manifestMediaType != <span class="keyword">null</span> &amp;&amp; !manifestMediaType.equals(EMPTY_STRING)) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;601</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// and used as fall-back for the mediatype of the package</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;602</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mMediaType = manifestMediaType;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;603</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;604</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;605</td> <td class="nbHitsCovered">&nbsp;552</td> <td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;606</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; String manifestMediaType = getMediaTypeFromManifest();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;607</td> <td class="nbHitsUncovered"><a title="Line 607: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 607: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (manifestMediaType != <span class="keyword">null</span> &amp;&amp; !manifestMediaType.equals(EMPTY_STRING)) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;608</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if not mimetype file exists, the root document mediaType from</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;609</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// the manifest.xml is taken</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;610</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; mMediaType = manifestMediaType;</pre></td></tr>
<tr> <td class="numLine">&nbsp;611</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;612</td> <td class="nbHitsCovered"><a title="Line 612: Conditional coverage 100% (2/2).">&nbsp;4</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 612: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mErrorHandler != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;613</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; logValidationWarning(OdfPackageConstraint.MIMETYPE_NOT_IN_PACKAGE, getBaseURI());</pre></td></tr>
<tr> <td class="numLine">&nbsp;614</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;615</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;616</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;617</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;618</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> validateMimeTypeEntry(ZipEntry mimetypeEntry, String firstEntryName) <span class="keyword">throws</span> SAXException {</pre></td></tr>
<tr> <td class="numLine">&nbsp;619</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;620</td> <td class="nbHitsCovered"><a title="Line 620: Conditional coverage 100% (2/2).">&nbsp;4</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 620: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mimetypeEntry.getMethod() != ZipEntry.STORED) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;621</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; logValidationError(OdfPackageConstraint.MIMETYPE_IS_COMPRESSED, getBaseURI());</pre></td></tr>
<tr> <td class="numLine">&nbsp;622</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;623</td> <td class="nbHitsCovered"><a title="Line 623: Conditional coverage 100% (2/2).">&nbsp;4</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 623: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mimetypeEntry.getExtra() != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;624</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; logValidationError(OdfPackageConstraint.MIMETYPE_HAS_EXTRA_FIELD, getBaseURI());</pre></td></tr>
<tr> <td class="numLine">&nbsp;625</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;626</td> <td class="nbHitsCovered"><a title="Line 626: Conditional coverage 100% (2/2).">&nbsp;4</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 626: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!OdfFile.MEDIA_TYPE.getPath().equals(firstEntryName)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;627</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; logValidationError(OdfPackageConstraint.MIMETYPE_NOT_FIRST_IN_PACKAGE, getBaseURI());</pre></td></tr>
<tr> <td class="numLine">&nbsp;628</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;629</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;630</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;631</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/** @returns the media type of the root document from the manifest.xml */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;632</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> String getMediaTypeFromManifest() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;633</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; OdfFileEntry rootDocumentEntry = mManifestEntries.get(SLASH);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;634</td> <td class="nbHitsCovered"><a title="Line 634: Conditional coverage 100% (2/2).">&nbsp;556</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 634: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (rootDocumentEntry != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;635</td> <td class="nbHitsCovered">&nbsp;554</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> rootDocumentEntry.getMediaTypeString();</pre></td></tr>
<tr> <td class="numLine">&nbsp;636</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;637</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;638</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;639</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;640</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;641</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/** @returns the media type of the root document from the manifest.xml */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;642</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> String getMediaTypeFromEntry(ZipEntry mimetypeEntry) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;643</td> <td class="nbHitsCovered">&nbsp;552</td> <td class="src"><pre class="src">&nbsp; String entryMediaType = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;644</td> <td class="nbHitsCovered">&nbsp;552</td> <td class="src"><pre class="src">&nbsp; ByteArrayOutputStream out = <span class="keyword">new</span> ByteArrayOutputStream();</pre></td></tr>
<tr> <td class="numLine">&nbsp;645</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;646</td> <td class="nbHitsCovered">&nbsp;552</td> <td class="src"><pre class="src">&nbsp; StreamHelper.transformStream(mZipFile.getInputStream(mimetypeEntry), out);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;647</td> <td class="nbHitsCovered">&nbsp;552</td> <td class="src"><pre class="src">&nbsp; entryMediaType = <span class="keyword">new</span> String(out.toByteArray(), 0, out.size(), <span class="string">"UTF-8"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;648</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;649</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="keyword">null</span>, ex);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;650</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">finally</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;651</td> <td class="nbHitsUncovered"><a title="Line 651: Conditional coverage 50% (1/2).">&nbsp;552</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 651: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (out != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;652</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;653</td> <td class="nbHitsCovered">&nbsp;552</td> <td class="src"><pre class="src">&nbsp; out.close();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;654</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (IOException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;655</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="keyword">null</span>, ex);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;656</td> <td class="nbHitsCovered">&nbsp;552</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;657</td> <td class="nbHitsCovered">&nbsp;552</td> <td class="src"><pre class="src">&nbsp; out = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;658</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;659</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;660</td> <td class="nbHitsCovered">&nbsp;552</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> entryMediaType;</pre></td></tr>
<tr> <td class="numLine">&nbsp;661</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;662</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;663</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;664</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Insert an Odf document into the package at the given path. The path has</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;665</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * to be a directory and will receive the MIME type of the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;666</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * OdfPackageDocument.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;667</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;668</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param doc</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;669</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * the OdfPackageDocument to be inserted.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;670</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;671</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * path relative to the package root, where the document should</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;672</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * be inserted.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;673</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;674</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">void</span> cacheDocument(OdfPackageDocument doc, String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;675</td> <td class="nbHitsCovered">&nbsp;751</td> <td class="src"><pre class="src">&nbsp; internalPath = normalizeDirectoryPath(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;676</td> <td class="nbHitsCovered">&nbsp;751</td> <td class="src"><pre class="src">&nbsp; updateFileEntry(ensureFileEntryExistence(internalPath), doc.getMediaTypeString());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;677</td> <td class="nbHitsCovered">&nbsp;751</td> <td class="src"><pre class="src">&nbsp; mPkgDocuments.put(internalPath, doc);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;678</td> <td class="nbHitsCovered">&nbsp;751</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;679</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;680</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;681</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Set the baseURI for this ODF package. NOTE: Should only be set during</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;682</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * saving the package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;683</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;684</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param baseURI</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;685</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * defining the location of the package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;686</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;687</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">void</span> setBaseURI(String baseURI) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;688</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mBaseURI = baseURI;</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;689</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;690</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;691</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;692</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return The URI to the ODF package, usually the URL, where this ODF</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;693</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * package is located. If the package has not URI NULL is returned.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;694</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * This is the case if the package was new created without an URI</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;695</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * and not saved before.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;696</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;697</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> String getBaseURI() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;698</td> <td class="nbHitsCovered">&nbsp;31142</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> mBaseURI;</pre></td></tr>
<tr> <td class="numLine">&nbsp;699</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;700</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;701</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;702</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Returns on ODF documents based a given mediatype.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;703</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;704</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;705</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * path relative to the package root, where the document should</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;706</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * be inserted.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;707</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return The ODF document, which mediatype dependends on the parameter or</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;708</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * NULL if media type were not supported.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;709</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;710</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> OdfPackageDocument loadDocument(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;711</td> <td class="nbHitsCovered">&nbsp;193</td> <td class="src"><pre class="src">&nbsp; OdfPackageDocument doc = getCachedDocument(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;712</td> <td class="nbHitsCovered"><a title="Line 712: Conditional coverage 100% (2/2).">&nbsp;193</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 712: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (doc == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;713</td> <td class="nbHitsCovered">&nbsp;137</td> <td class="src"><pre class="src">&nbsp; String mediaTypeString = getMediaTypeString();</pre></td></tr>
<tr> <td class="numLine">&nbsp;714</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// ToDo: Issue 265 - Remove dependency to higher layer by factory</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;715</td> <td class="nbHitsCovered">&nbsp;137</td> <td class="src"><pre class="src">&nbsp; OdfMediaType odfMediaType = OdfMediaType.getOdfMediaType(mediaTypeString);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;716</td> <td class="nbHitsUncovered"><a title="Line 716: Conditional coverage 50% (1/2).">&nbsp;137</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 716: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (odfMediaType == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;717</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; doc = <span class="keyword">new</span> OdfPackageDocument(<span class="keyword">this</span>, internalPath, mediaTypeString);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;718</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;719</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;720</td> <td class="nbHitsCovered">&nbsp;137</td> <td class="src"><pre class="src">&nbsp; String documentMediaType = getMediaTypeString(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;721</td> <td class="nbHitsCovered">&nbsp;137</td> <td class="src"><pre class="src">&nbsp; odfMediaType = OdfMediaType.getOdfMediaType(documentMediaType);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;722</td> <td class="nbHitsCovered"><a title="Line 722: Conditional coverage 100% (2/2).">&nbsp;137</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 722: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (odfMediaType == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;723</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;724</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;725</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// ToDo: Issue 265 - Remove dependency to higher layer by</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;726</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// facotory</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;727</td> <td class="nbHitsCovered">&nbsp;133</td> <td class="src"><pre class="src">&nbsp; doc = OdfDocument.loadDocument(<span class="keyword">this</span>, internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;728</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;729</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackageDocument.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="keyword">null</span>, ex);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;730</td> <td class="nbHitsCovered">&nbsp;133</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;731</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;732</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;733</td> <td class="nbHitsCovered">&nbsp;189</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> doc;</pre></td></tr>
<tr> <td class="numLine">&nbsp;734</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;735</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;736</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;737</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @deprecated This method is only added temporary as workaround for the IBM</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;738</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * fork using different DOC classes. Until the registering of</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;739</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * DOC documents to the PKG layer has been finished.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;740</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;741</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * path relative to the package root, where the document should</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;742</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * be inserted.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;743</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return an already open OdfPackageDocument via its path, otherwise NULL.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;744</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;745</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; @Deprecated</pre></td></tr>
<tr> <td class="numLine">&nbsp;746</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> OdfPackageDocument getCachedDocument(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;747</td> <td class="nbHitsCovered">&nbsp;193</td> <td class="src"><pre class="src">&nbsp; internalPath = normalizeDirectoryPath(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;748</td> <td class="nbHitsCovered">&nbsp;193</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> mPkgDocuments.get(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;749</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;750</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;751</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;752</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param dom</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;753</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * the DOM tree that has been parsed and should be added to the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;754</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * cache.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;755</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;756</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * path relative to the package root, where the XML of the DOM is</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;757</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * located.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;758</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return an already open OdfPackageDocument via its path, otherwise NULL.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;759</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;760</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">void</span> cacheDom(Document dom, String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;761</td> <td class="nbHitsCovered">&nbsp;1198</td> <td class="src"><pre class="src">&nbsp; internalPath = normalizeFilePath(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;762</td> <td class="nbHitsCovered">&nbsp;1198</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">this</span>.insert(dom, internalPath, <span class="keyword">null</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;763</td> <td class="nbHitsCovered">&nbsp;1198</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;764</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;765</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;766</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;767</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * path relative to the package root, where the document should</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;768</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * be inserted.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;769</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return an already open W3C XML Documenet via its path, otherwise NULL.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;770</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;771</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; Document getCachedDom(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;772</td> <td class="nbHitsCovered">&nbsp;1379</td> <td class="src"><pre class="src">&nbsp; internalPath = normalizeFilePath(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;773</td> <td class="nbHitsCovered">&nbsp;1379</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">this</span>.mPkgDoms.get(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;774</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;775</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;776</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;777</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return a map with all open W3C XML documents with their internal package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;778</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * path as key.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;779</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;780</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; Map&lt;String, Document&gt; getCachedDoms() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;781</td> <td class="nbHitsCovered">&nbsp;158</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">this</span>.mPkgDoms;</pre></td></tr>
<tr> <td class="numLine">&nbsp;782</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;783</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;784</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;785</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Removes a document from the package via its path. Independent if it was</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;786</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * already opened or not.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;787</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;788</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;789</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * path relative to the package root, where the document should</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;790</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * be removed.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;791</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;792</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> removeDocument(String internalPath) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;793</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Note: the EMPTY String for rrot path will be exchanged to a SLASH</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;794</td> <td class="nbHitsCovered">&nbsp;15</td> <td class="src"><pre class="src">&nbsp; internalPath = normalizeDirectoryPath(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;795</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;796</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// get all files of the package</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;797</td> <td class="nbHitsCovered">&nbsp;15</td> <td class="src"><pre class="src">&nbsp; Set&lt;String&gt; allPackageFileNames = getFilePaths();</pre></td></tr>
<tr> <td class="numLine">&nbsp;798</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;799</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// If the document is the root document</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;800</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// the "/" representing the root document is outside the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;801</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// manifest.xml in the API an empty path</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;802</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// still normalizeDirectoryPath() already exchanged the EMPTY_STRING</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;803</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// to SLASH</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;804</td> <td class="nbHitsUncovered"><a title="Line 804: Conditional coverage 50% (1/2).">&nbsp;15</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 804: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (internalPath.equals(SLASH)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;805</td> <td class="nbHitsUncovered"><a title="Line 805: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 805: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (String entryName : allPackageFileNames) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;806</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; remove(entryName);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;807</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;808</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; remove(SLASH);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;809</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;810</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// remove all the stream of the directory, such as pictures</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;811</td> <td class="nbHitsCovered">&nbsp;15</td> <td class="src"><pre class="src">&nbsp; List&lt;String&gt; directoryEntryNames = <span class="keyword">new</span> ArrayList&lt;String&gt;();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;812</td> <td class="nbHitsCovered"><a title="Line 812: Conditional coverage 100% (2/2).">&nbsp;15</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 812: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String entryName : allPackageFileNames) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;813</td> <td class="nbHitsCovered"><a title="Line 813: Conditional coverage 100% (2/2).">&nbsp;1067</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 813: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (entryName.startsWith(internalPath)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;814</td> <td class="nbHitsCovered">&nbsp;85</td> <td class="src"><pre class="src">&nbsp; directoryEntryNames.add(entryName);</pre></td></tr>
<tr> <td class="numLine">&nbsp;815</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;816</td> <td class="nbHitsCovered">&nbsp;1067</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;817</td> <td class="nbHitsCovered"><a title="Line 817: Conditional coverage 100% (2/2).">&nbsp;15</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 817: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String entryName : directoryEntryNames) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;818</td> <td class="nbHitsCovered">&nbsp;85</td> <td class="src"><pre class="src">&nbsp; remove(entryName);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;819</td> <td class="nbHitsCovered">&nbsp;85</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;820</td> <td class="nbHitsCovered">&nbsp;15</td> <td class="src"><pre class="src">&nbsp; remove(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;821</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;822</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;823</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackageDocument.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="keyword">null</span>, ex);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;824</td> <td class="nbHitsCovered">&nbsp;15</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;825</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;826</td> <td class="nbHitsCovered">&nbsp;15</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;827</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;828</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/** @return all currently opened OdfPackageDocument of this OdfPackage */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;829</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; Set&lt;String&gt; getCachedPackageDocuments() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;830</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> mPkgDocuments.keySet();</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;831</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;832</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;833</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> OdfPackageDocument getRootDocument() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;834</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> mPkgDocuments.get(OdfPackageDocument.ROOT_DOCUMENT_PATH);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;835</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;836</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;837</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> OdfManifestDom getManifestDom() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;838</td> <td class="nbHitsCovered">&nbsp;775</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> mManifestDom;</pre></td></tr>
<tr> <td class="numLine">&nbsp;839</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;840</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;841</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;842</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Get the media type of the ODF file or document (ie. a directory). A</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;843</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * directory with a mediatype can be loaded as</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;844</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;code&gt;OdfPackageDocument&lt;/code&gt;. Note: A directoy is represented by in</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;845</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * the package as directory with media type</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;846</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;847</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;848</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * within the package of the file or document.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;849</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return the mediaType for the resource of the given path</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;850</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;851</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> String getMediaTypeString(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;852</td> <td class="nbHitsCovered">&nbsp;692</td> <td class="src"><pre class="src">&nbsp; String mediaType = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;853</td> <td class="nbHitsUncovered"><a title="Line 853: Conditional coverage 50% (1/2).">&nbsp;692</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 853: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (internalPath != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;854</td> <td class="nbHitsCovered"><a title="Line 854: Conditional coverage 100% (4/4) [each condition: 100%, 100%].">&nbsp;692</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 854: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (internalPath.equals(EMPTY_STRING) || internalPath.equals(SLASH)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;855</td> <td class="nbHitsCovered">&nbsp;392</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> mMediaType;</pre></td></tr>
<tr> <td class="numLine">&nbsp;856</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;857</td> <td class="nbHitsCovered">&nbsp;300</td> <td class="src"><pre class="src">&nbsp; mediaType = getMediaTypeFromEntry(normalizePath(internalPath));</pre></td></tr>
<tr> <td class="numLine">&nbsp;858</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if no file was found, look for a normalized directory name</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;859</td> <td class="nbHitsCovered"><a title="Line 859: Conditional coverage 100% (2/2).">&nbsp;300</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 859: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mediaType == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;860</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; mediaType = getMediaTypeFromEntry(normalizeDirectoryPath(internalPath));</pre></td></tr>
<tr> <td class="numLine">&nbsp;861</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;862</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;863</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;864</td> <td class="nbHitsCovered">&nbsp;300</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> mediaType;</pre></td></tr>
<tr> <td class="numLine">&nbsp;865</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;866</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;867</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> String getMediaTypeFromEntry(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;868</td> <td class="nbHitsCovered">&nbsp;304</td> <td class="src"><pre class="src">&nbsp; OdfFileEntry entry = getFileEntry(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;869</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if the document is not in the package, the return is NULL</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;870</td> <td class="nbHitsCovered"><a title="Line 870: Conditional coverage 100% (2/2).">&nbsp;304</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 870: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (entry != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;871</td> <td class="nbHitsCovered">&nbsp;296</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> entry.getMediaTypeString();</pre></td></tr>
<tr> <td class="numLine">&nbsp;872</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;873</td> <td class="nbHitsCovered">&nbsp;8</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;874</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;875</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;876</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;877</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;878</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Get the media type of the ODF package (equal to media type of ODF root</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;879</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * document)</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;880</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;881</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return the mediaType string of this ODF package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;882</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;883</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> String getMediaTypeString() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;884</td> <td class="nbHitsCovered">&nbsp;166</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> mMediaType;</pre></td></tr>
<tr> <td class="numLine">&nbsp;885</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;886</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;887</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;888</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Set the media type of the ODF package (equal to media type of ODF root</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;889</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * document)</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;890</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;891</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param mediaType</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;892</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * string of this ODF package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;893</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;894</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">void</span> setMediaTypeString(String mediaType) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;895</td> <td class="nbHitsCovered">&nbsp;577</td> <td class="src"><pre class="src">&nbsp; mMediaType = mediaType;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;896</td> <td class="nbHitsCovered">&nbsp;577</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;897</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;898</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;899</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Get an OdfFileEntry for the internalPath NOTE: This method should be</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;900</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * better moved to a DOM inherited Manifest class</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;901</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;902</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;903</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * The relative package path within the ODF package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;904</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return The manifest file entry will be returned.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;905</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;906</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> OdfFileEntry getFileEntry(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;907</td> <td class="nbHitsCovered">&nbsp;880</td> <td class="src"><pre class="src">&nbsp; internalPath = normalizeFilePath(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;908</td> <td class="nbHitsCovered">&nbsp;880</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> mManifestEntries.get(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;909</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;910</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;911</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;912</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Get a OdfFileEntries from the manifest file (i.e. /META/manifest.xml")</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;913</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;914</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return The paths of the manifest file entries will be returned.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;915</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;916</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> Set&lt;String&gt; getFilePaths() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;917</td> <td class="nbHitsCovered">&nbsp;111</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> mManifestEntries.keySet();</pre></td></tr>
<tr> <td class="numLine">&nbsp;918</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;919</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;920</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;921</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Check existence of a file in the package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;922</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;923</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;924</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * The relative package documentURL within the ODF package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;925</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return True if there is an entry and a file for the given documentURL</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;926</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;927</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">boolean</span> contains(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;928</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; internalPath = normalizeFilePath(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;929</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> mManifestEntries.containsKey(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;930</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;931</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;932</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;933</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Save the package to given documentURL.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;934</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;935</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param odfPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;936</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - the path to the ODF package destination</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;937</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;938</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - if the package could not be saved</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;939</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;940</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> save(String odfPath) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;941</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; File f = <span class="keyword">new</span> File(odfPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;942</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; save(f);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;943</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;944</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;945</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;946</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Save package to a given File. After saving it is still necessary to close</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;947</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * the package to have again full access about the file.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;948</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;949</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param pkgFile</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;950</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - the File to save the ODF package to</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;951</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;952</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - if the package could not be saved</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;953</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;954</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> save(File pkgFile) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;955</td> <td class="nbHitsCovered">&nbsp;240</td> <td class="src"><pre class="src">&nbsp; String baseURL = getBaseURLFromFile(pkgFile);</pre></td></tr>
<tr> <td class="numLine">&nbsp;956</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if (baseURL.equals(mBaseURI)) {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;957</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// // save to the same file: cache everything first</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;958</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// // ToDo: (Issue 219 - PackageRefactoring) --maybe it's better to</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;959</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// write to a new file and copy that</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;960</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// // to the original one - would be less memory footprint</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;961</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// cacheContent();</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;962</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// }</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;963</td> <td class="nbHitsCovered">&nbsp;240</td> <td class="src"><pre class="src">&nbsp; FileOutputStream fos = <span class="keyword">new</span> FileOutputStream(pkgFile);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;964</td> <td class="nbHitsCovered">&nbsp;240</td> <td class="src"><pre class="src">&nbsp; save(fos, baseURL);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;965</td> <td class="nbHitsCovered">&nbsp;240</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;966</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;967</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> save(OutputStream odfStream) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;968</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; save(odfStream, <span class="keyword">null</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;969</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;970</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;971</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;972</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Sets the password of this package. if password is not null, package will</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;973</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * be encrypted when save.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;974</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;975</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param password</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;976</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * password</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;977</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @since 0.8.9</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;978</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;979</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> setPassword(String password) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;980</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; newPwd = password;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;981</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;982</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;983</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;984</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Save an ODF document to the OutputStream.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;985</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;986</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param odfStream</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;987</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - the OutputStream to insert content to</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;988</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param baseURL</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;989</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * defining the location of the package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;990</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;991</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - if the package could not be saved</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;992</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;993</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> save(OutputStream odfStream, String baseURL) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLine">&nbsp;994</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// try {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;995</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; mBaseURI = baseURL;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;996</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; OdfFileEntry rootEntry = mManifestEntries.get(SLASH);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;997</td> <td class="nbHitsUncovered"><a title="Line 997: Conditional coverage 50% (1/2).">&nbsp;241</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 997: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (rootEntry == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;998</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; rootEntry = <span class="keyword">new</span> OdfFileEntry(getManifestDom().getRootElement().newFileEntryElement(SLASH, mMediaType));</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;999</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mManifestEntries.put(SLASH, rootEntry);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1000</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1001</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; rootEntry.setMediaTypeString(mMediaType);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1002</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1003</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; ZipOutputStream zos = <span class="keyword">new</span> ZipOutputStream(odfStream);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1004</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;1005</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// remove mediatype path and use it as first</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1006</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">this</span>.mManifestEntries.remove(OdfFile.MEDIA_TYPE.getPath());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1007</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; Iterator&lt;String&gt; it = mManifestEntries.keySet().iterator();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1008</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; String path = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1009</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">boolean</span> isFirstFile = <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1010</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; CRC32 crc = <span class="keyword">new</span> CRC32();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1011</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">long</span> modTime = (<span class="keyword">new</span> java.util.Date()).getTime();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1012</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] data = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1013</td> <td class="nbHitsUncovered"><a title="Line 1013: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;3131</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1013: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">while</span> (it.hasNext() || isFirstFile) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1014</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// try {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1015</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// ODF requires the "mimetype" file to be at first in the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1016</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// package</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1017</td> <td class="nbHitsCovered"><a title="Line 1017: Conditional coverage 100% (2/2).">&nbsp;2891</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1017: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (isFirstFile) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1018</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; isFirstFile = <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1019</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// create "mimetype" from current attribute value</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1020</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; data = mMediaType.getBytes(<span class="string">"UTF-8"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1021</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; createZipEntry(OdfFile.MEDIA_TYPE.getPath(), data, zos, modTime, crc);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1022</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1023</td> <td class="nbHitsCovered">&nbsp;2650</td> <td class="src"><pre class="src">&nbsp; path = it.next();</pre></td></tr>
<tr> <td class="numLine">&nbsp;1024</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// not interested to reuse previous mediaType nor</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1025</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// manifest from ZIP</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1026</td> <td class="nbHitsUncovered"><a title="Line 1026: Conditional coverage 66% (4/6) [each condition: 100%, 50%, 50%].">&nbsp;2650</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1026: Conditional coverage 66% (4/6) [each condition: 100%, 50%, 50%]."> <span class="keyword">if</span> (!path.endsWith(SLASH) &amp;&amp; !path.equals(OdfPackage.OdfFile.MANIFEST.getPath()) &amp;&amp; !path.equals(OdfPackage.OdfFile.MEDIA_TYPE.getPath())) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1027</td> <td class="nbHitsCovered">&nbsp;2040</td> <td class="src"><pre class="src">&nbsp; data = getBytes(path);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1028</td> <td class="nbHitsCovered">&nbsp;2040</td> <td class="src"><pre class="src">&nbsp; createZipEntry(path, data, zos, modTime, crc);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1029</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1030</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1031</td> <td class="nbHitsCovered">&nbsp;2890</td> <td class="src"><pre class="src">&nbsp; data = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1032</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// } catch (IOException ex) {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1033</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Logger.getLogger(OdfPackage.class.getName()).log(Level.SEVERE,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1034</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// null, ex);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1035</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1036</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1037</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Create "META-INF/" directory</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1038</td> <td class="nbHitsCovered">&nbsp;240</td> <td class="src"><pre class="src">&nbsp; createZipEntry(<span class="string">"META-INF/"</span>, <span class="keyword">null</span>, zos, modTime, crc);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1039</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Create "META-INF/manifest.xml" file</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1040</td> <td class="nbHitsCovered">&nbsp;240</td> <td class="src"><pre class="src">&nbsp; data = getBytes(OdfFile.MANIFEST.getPath());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1041</td> <td class="nbHitsCovered">&nbsp;240</td> <td class="src"><pre class="src">&nbsp; createZipEntry(OdfFile.MANIFEST.getPath(), data, zos, modTime, crc);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1042</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">finally</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1043</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; zos.close();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1044</td> <td class="nbHitsCovered">&nbsp;240</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1045</td> <td class="nbHitsCovered">&nbsp;240</td> <td class="src"><pre class="src">&nbsp; odfStream.flush();</pre></td></tr>
<tr> <td class="numLine">&nbsp;1046</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// } catch (IOException ex) {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1047</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Logger.getLogger(OdfPackage.class.getName()).log(Level.SEVERE, null,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1048</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// ex);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1049</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// }</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1050</td> <td class="nbHitsCovered">&nbsp;240</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1051</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1052</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> createZipEntry(String path, <span class="keyword">byte</span>[] data, ZipOutputStream zos, <span class="keyword">long</span> modTime, CRC32 crc) <span class="keyword">throws</span> IOException {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1053</td> <td class="nbHitsCovered">&nbsp;2761</td> <td class="src"><pre class="src">&nbsp; ZipEntry ze = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1054</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// try {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1055</td> <td class="nbHitsCovered">&nbsp;2761</td> <td class="src"><pre class="src">&nbsp; ze = mZipEntries.get(path);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1056</td> <td class="nbHitsCovered"><a title="Line 1056: Conditional coverage 100% (2/2).">&nbsp;2761</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1056: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (ze == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1057</td> <td class="nbHitsCovered">&nbsp;983</td> <td class="src"><pre class="src">&nbsp; ze = <span class="keyword">new</span> ZipEntry(path);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1058</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1059</td> <td class="nbHitsCovered">&nbsp;2761</td> <td class="src"><pre class="src">&nbsp; ze.setTime(modTime);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1060</td> <td class="nbHitsCovered"><a title="Line 1060: Conditional coverage 100% (2/2).">&nbsp;2761</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1060: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (fileNeedsCompression(path)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1061</td> <td class="nbHitsCovered">&nbsp;2249</td> <td class="src"><pre class="src">&nbsp; ze.setMethod(ZipEntry.DEFLATED);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1062</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1063</td> <td class="nbHitsCovered">&nbsp;512</td> <td class="src"><pre class="src">&nbsp; ze.setMethod(ZipEntry.STORED);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1064</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1065</td> <td class="nbHitsCovered">&nbsp;2761</td> <td class="src"><pre class="src">&nbsp; crc.reset();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1066</td> <td class="nbHitsCovered"><a title="Line 1066: Conditional coverage 100% (2/2).">&nbsp;2761</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1066: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (data != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1067</td> <td class="nbHitsCovered">&nbsp;2518</td> <td class="src"><pre class="src">&nbsp; OdfFileEntry fileEntry = mManifestEntries.get(path);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1068</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// encrypt file</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1069</td> <td class="nbHitsCovered"><a title="Line 1069: Conditional coverage 100% (4/4) [each condition: 100%, 100%].">&nbsp;2518</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1069: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (data.length &gt; 0 &amp;&amp; fileNeedsEncryption(path)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1070</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; data = encryptData(data, fileEntry);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1071</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// encrypted file entries shall be flagged as 'STORED'.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1072</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; ze.setMethod(ZipEntry.STORED);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1073</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// the size of the encrypted file should replace the real</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1074</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// size value.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1075</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; ze.setCompressedSize(data.length);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1076</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1077</td> <td class="nbHitsCovered"><a title="Line 1077: Conditional coverage 100% (2/2).">&nbsp;2514</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1077: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (fileEntry != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1078</td> <td class="nbHitsCovered">&nbsp;2033</td> <td class="src"><pre class="src">&nbsp; fileEntry.setSize(<span class="keyword">null</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1079</td> <td class="nbHitsCovered">&nbsp;2033</td> <td class="src"><pre class="src">&nbsp; FileEntryElement fileEntryEle = fileEntry.getOdfElement();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1080</td> <td class="nbHitsCovered">&nbsp;2033</td> <td class="src"><pre class="src">&nbsp; EncryptionDataElement encryptionDataElement = OdfElement.findFirstChildNode(EncryptionDataElement.<span class="keyword">class</span>, fileEntryEle);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1081</td> <td class="nbHitsUncovered"><a title="Line 1081: Conditional coverage 50% (1/2).">&nbsp;2033</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1081: Conditional coverage 50% (1/2)."> <span class="keyword">while</span> (encryptionDataElement != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1082</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; fileEntryEle.removeChild(encryptionDataElement);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1083</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; encryptionDataElement = OdfElement.findFirstChildNode(EncryptionDataElement.<span class="keyword">class</span>, fileEntryEle);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1084</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1085</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1086</td> <td class="nbHitsCovered">&nbsp;2514</td> <td class="src"><pre class="src">&nbsp; ze.setCompressedSize(-1);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1087</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1088</td> <td class="nbHitsCovered">&nbsp;2518</td> <td class="src"><pre class="src">&nbsp; ze.setSize(data.length);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1089</td> <td class="nbHitsCovered">&nbsp;2518</td> <td class="src"><pre class="src">&nbsp; crc.update(data);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1090</td> <td class="nbHitsCovered">&nbsp;2518</td> <td class="src"><pre class="src">&nbsp; ze.setCrc(crc.getValue());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1091</td> <td class="nbHitsCovered">&nbsp;2518</td> <td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1092</td> <td class="nbHitsCovered">&nbsp;243</td> <td class="src"><pre class="src">&nbsp; ze.setSize(0);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1093</td> <td class="nbHitsCovered">&nbsp;243</td> <td class="src"><pre class="src">&nbsp; ze.setCrc(0);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1094</td> <td class="nbHitsCovered">&nbsp;243</td> <td class="src"><pre class="src">&nbsp; ze.setCompressedSize(-1);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1095</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1096</td> <td class="nbHitsCovered">&nbsp;2761</td> <td class="src"><pre class="src">&nbsp; zos.putNextEntry(ze);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1097</td> <td class="nbHitsCovered"><a title="Line 1097: Conditional coverage 100% (2/2).">&nbsp;2761</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1097: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (data != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1098</td> <td class="nbHitsCovered">&nbsp;2518</td> <td class="src"><pre class="src">&nbsp; zos.write(data, 0, data.length);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1099</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1100</td> <td class="nbHitsCovered">&nbsp;2761</td> <td class="src"><pre class="src">&nbsp; zos.closeEntry();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1101</td> <td class="nbHitsCovered">&nbsp;2760</td> <td class="src"><pre class="src">&nbsp; mZipEntries.put(path, ze);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1102</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// } catch (IOException ex) {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1103</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Logger.getLogger(OdfPackage.class.getName()).log(Level.SEVERE, null,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1104</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// ex);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1105</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// }</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1106</td> <td class="nbHitsCovered">&nbsp;2760</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1107</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1108</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1109</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Determines if a file have to be encrypted.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1110</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1111</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1112</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * the file location</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1113</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return true if the file needs encrypted, false, otherwise</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1114</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1115</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">boolean</span> fileNeedsEncryption(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1116</td> <td class="nbHitsCovered"><a title="Line 1116: Conditional coverage 100% (2/2).">&nbsp;2381</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1116: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (newPwd != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;1117</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// ODF spec does not allow encrytion of "./mimetype" file</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1118</td> <td class="nbHitsUncovered"><a title="Line 1118: Conditional coverage 83% (5/6) [each condition: 50%, 100%, 100%].">&nbsp;6</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1118: Conditional coverage 83% (5/6) [each condition: 50%, 100%, 100%]."> <span class="keyword">if</span> (internalPath.endsWith(SLASH) || OdfFile.MANIFEST.getPath().equals(internalPath) || OdfPackage.OdfFile.MEDIA_TYPE.getPath().equals(internalPath)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1119</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1120</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1121</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> fileNeedsCompression(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1122</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1123</td> <td class="nbHitsCovered">&nbsp;2375</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1124</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1125</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1126</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1127</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1128</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Determines if a file have to be compressed.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1129</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1130</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1131</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * the file location</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1132</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return true if the file needs compression, false, otherwise</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1133</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1134</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">boolean</span> fileNeedsCompression(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1135</td> <td class="nbHitsCovered">&nbsp;2765</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">boolean</span> result = <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1136</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1137</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// ODF spec does not allow compression of "./mimetype" file</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1138</td> <td class="nbHitsCovered"><a title="Line 1138: Conditional coverage 100% (2/2).">&nbsp;2765</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1138: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (internalPath.equals(OdfPackage.OdfFile.MEDIA_TYPE.getPath())) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1139</td> <td class="nbHitsCovered">&nbsp;241</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1140</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1141</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// see if the file was already compressed</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1142</td> <td class="nbHitsCovered"><a title="Line 1142: Conditional coverage 100% (2/2).">&nbsp;2524</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1142: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (internalPath.lastIndexOf(<span class="string">"."</span>) &gt; 0) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1143</td> <td class="nbHitsCovered">&nbsp;2105</td> <td class="src"><pre class="src">&nbsp; String suffix = internalPath.substring(internalPath.lastIndexOf(<span class="string">"."</span>) + 1, internalPath.length());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1144</td> <td class="nbHitsCovered"><a title="Line 1144: Conditional coverage 100% (2/2).">&nbsp;2105</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1144: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mCompressedFileTypes.contains(suffix.toLowerCase())) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1145</td> <td class="nbHitsCovered">&nbsp;271</td> <td class="src"><pre class="src">&nbsp; result = <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1146</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1147</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1148</td> <td class="nbHitsCovered">&nbsp;2524</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> result;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1149</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1150</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1151</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> close(Closeable closeable) <span class="keyword">throws</span> SAXException, IOException {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1152</td> <td class="nbHitsUncovered"><a title="Line 1152: Conditional coverage 50% (1/2).">&nbsp;360</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1152: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (closeable != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1153</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1154</td> <td class="nbHitsCovered">&nbsp;360</td> <td class="src"><pre class="src">&nbsp; closeable.close();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1155</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (IOException ioe) {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1156</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Warning only. This is usually just logged.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1157</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Allow user to throw an exception all the same</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1158</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; handleIOException(ioe, <span class="keyword">true</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1159</td> <td class="nbHitsCovered">&nbsp;360</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1160</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1161</td> <td class="nbHitsCovered">&nbsp;360</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1162</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1163</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> handleIOException(IOException ex, <span class="keyword">boolean</span> warningOnly) <span class="keyword">throws</span> SAXException, IOException {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1164</td> <td class="nbHitsUncovered"><a title="Line 1164: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1164: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (mErrorHandler != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1165</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; SAXParseException se = <span class="keyword">new</span> SAXParseException(ex.getMessage(), <span class="keyword">null</span>, ex);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1166</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1167</td> <td class="nbHitsUncovered"><a title="Line 1167: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1167: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (warningOnly) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1168</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mErrorHandler.warning(se);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1169</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1170</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mErrorHandler.error(se);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1171</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1172</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (SAXException e1) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1173</td> <td class="nbHitsUncovered"><a title="Line 1173: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1173: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (e1 == se) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1174</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> ex;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1175</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// We re-throw the original exception if the error handler</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1176</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// just threw the SAXException we gave it.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1177</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1178</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> e1; <span class="comment">// Throw what the error handler threw.</span></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1179</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1180</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1181</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1182</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> ex; <span class="comment">// No error handler? Just throw the original IOException</span></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1183</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1184</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1185</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1186</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Close the OdfPackage after it is no longer needed. Even after saving it</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1187</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * is still necessary to close the package to have again full access about</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1188</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * the file. Closing the OdfPackage will release all temporary created data.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1189</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Do this as the last action to free resources. Closing an already closed</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1190</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * document has no effect.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1191</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1192</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> close() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1193</td> <td class="nbHitsUncovered"><a title="Line 1193: Conditional coverage 50% (1/2).">&nbsp;53</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1193: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (mZipFile != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1194</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1195</td> <td class="nbHitsCovered">&nbsp;53</td> <td class="src"><pre class="src">&nbsp; mZipFile.close();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1196</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (IOException ex) {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1197</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// log exception and continue</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1198</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.INFO, <span class="keyword">null</span>, ex);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1199</td> <td class="nbHitsCovered">&nbsp;53</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1200</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1201</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// release all stuff - this class is impossible to use afterwards</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1202</td> <td class="nbHitsCovered">&nbsp;53</td> <td class="src"><pre class="src">&nbsp; mZipFile = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1203</td> <td class="nbHitsCovered">&nbsp;53</td> <td class="src"><pre class="src">&nbsp; mMediaType = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1204</td> <td class="nbHitsCovered">&nbsp;53</td> <td class="src"><pre class="src">&nbsp; mZipEntries = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1205</td> <td class="nbHitsCovered">&nbsp;53</td> <td class="src"><pre class="src">&nbsp; mPkgDoms = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1206</td> <td class="nbHitsCovered">&nbsp;53</td> <td class="src"><pre class="src">&nbsp; mMemoryFileCache = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1207</td> <td class="nbHitsCovered">&nbsp;53</td> <td class="src"><pre class="src">&nbsp; mManifestEntries = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1208</td> <td class="nbHitsCovered">&nbsp;53</td> <td class="src"><pre class="src">&nbsp; mBaseURI = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1209</td> <td class="nbHitsCovered">&nbsp;53</td> <td class="src"><pre class="src">&nbsp; mResolver = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1210</td> <td class="nbHitsCovered">&nbsp;53</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1211</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1212</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1213</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Parse the Manifest file</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1214</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1215</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> parseManifest() <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLine">&nbsp;1216</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// ToDo: manifest.xml will be held in the future as DOM, now its</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1217</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// being generated for each save()</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1218</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// try {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1219</td> <td class="nbHitsCovered">&nbsp;557</td> <td class="src"><pre class="src">&nbsp; mManifestDom = (OdfManifestDom) OdfFileDom.newFileDom(<span class="keyword">this</span>, OdfFile.MANIFEST.getPath());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1220</td> <td class="nbHitsCovered">&nbsp;557</td> <td class="src"><pre class="src">&nbsp; ManifestElement manifestEle = mManifestDom.getRootElement();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1221</td> <td class="nbHitsCovered"><a title="Line 1221: Conditional coverage 100% (2/2).">&nbsp;557</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1221: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (manifestEle != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1222</td> <td class="nbHitsCovered">&nbsp;554</td> <td class="src"><pre class="src">&nbsp; setManifestVersion(manifestEle.getVersionAttribute());</pre></td></tr>
<tr> <td class="numLine">&nbsp;1223</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1224</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; logValidationError(OdfPackageConstraint.MANIFEST_NOT_IN_PACKAGE, getBaseURI());</pre></td></tr>
<tr> <td class="numLine">&nbsp;1225</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1226</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; Map&lt;String, OdfFileEntry&gt; entries = getManifestEntries();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1227</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; FileEntryElement fileEntryEle = OdfElement.findFirstChildNode(FileEntryElement.<span class="keyword">class</span>, manifestEle);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1228</td> <td class="nbHitsCovered"><a title="Line 1228: Conditional coverage 100% (2/2).">&nbsp;6349</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1228: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (fileEntryEle != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1229</td> <td class="nbHitsCovered">&nbsp;5793</td> <td class="src"><pre class="src">&nbsp; String path = fileEntryEle.getFullPathAttribute();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1230</td> <td class="nbHitsCovered"><a title="Line 1230: Conditional coverage 100% (2/2).">&nbsp;5793</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1230: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (path.equals(EMPTY_STRING)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1231</td> <td class="nbHitsCovered"><a title="Line 1231: Conditional coverage 100% (2/2).">&nbsp;6</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1231: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (getErrorHandler() != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1232</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; logValidationError(OdfPackageConstraint.MANIFEST_WITH_EMPTY_PATH, getBaseURI());</pre></td></tr>
<tr> <td class="numLine">&nbsp;1233</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1234</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1235</td> <td class="nbHitsCovered">&nbsp;5793</td> <td class="src"><pre class="src">&nbsp; path = normalizePath(path);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1236</td> <td class="nbHitsCovered">&nbsp;5793</td> <td class="src"><pre class="src">&nbsp; OdfFileEntry currentFileEntry = entries.get(path);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1237</td> <td class="nbHitsCovered"><a title="Line 1237: Conditional coverage 100% (2/2).">&nbsp;5793</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1237: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentFileEntry == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1238</td> <td class="nbHitsCovered">&nbsp;5555</td> <td class="src"><pre class="src">&nbsp; currentFileEntry = <span class="keyword">new</span> OdfFileEntry(fileEntryEle);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1239</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1240</td> <td class="nbHitsUncovered"><a title="Line 1240: Conditional coverage 50% (1/2).">&nbsp;5793</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1240: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (path != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1241</td> <td class="nbHitsCovered">&nbsp;5793</td> <td class="src"><pre class="src">&nbsp; entries.put(path, currentFileEntry);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1242</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1243</td> <td class="nbHitsCovered">&nbsp;5793</td> <td class="src"><pre class="src">&nbsp; fileEntryEle = OdfElement.findNextChildNode(FileEntryElement.<span class="keyword">class</span>, fileEntryEle);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1244</td> <td class="nbHitsCovered">&nbsp;5793</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1245</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; mMemoryFileCache.remove(OdfFile.MANIFEST.getPath());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1246</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; mPkgDoms.put(OdfFile.MANIFEST.getPath(), mManifestDom);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1247</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// } catch (Exception ex) {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1248</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Logger.getLogger(OdfPackage.class.getName()).log(Level.SEVERE, null,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1249</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// ex);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1250</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// }</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1251</td> <td class="nbHitsCovered">&nbsp;556</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1252</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1253</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; XMLReader getXMLReader() <span class="keyword">throws</span> ParserConfigurationException, SAXException {</pre></td></tr>
<tr> <td class="numLine">&nbsp;1254</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// create sax parser</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1255</td> <td class="nbHitsCovered">&nbsp;1180</td> <td class="src"><pre class="src">&nbsp; SAXParserFactory saxFactory = <span class="keyword">new</span> org.apache.xerces.jaxp.SAXParserFactoryImpl();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1256</td> <td class="nbHitsCovered">&nbsp;1180</td> <td class="src"><pre class="src">&nbsp; saxFactory.setNamespaceAware(<span class="keyword">true</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1257</td> <td class="nbHitsCovered">&nbsp;1180</td> <td class="src"><pre class="src">&nbsp; saxFactory.setValidating(<span class="keyword">false</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1258</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1259</td> <td class="nbHitsCovered">&nbsp;1180</td> <td class="src"><pre class="src">&nbsp; saxFactory.setFeature(<span class="string">"http://apache.org/xml/features/nonvalidating/load-external-dtd"</span>, <span class="keyword">false</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1260</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1261</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="keyword">null</span>, ex);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1262</td> <td class="nbHitsCovered">&nbsp;1180</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1263</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1264</td> <td class="nbHitsCovered">&nbsp;1180</td> <td class="src"><pre class="src">&nbsp; SAXParser parser = saxFactory.newSAXParser();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1265</td> <td class="nbHitsCovered">&nbsp;1180</td> <td class="src"><pre class="src">&nbsp; XMLReader xmlReader = parser.getXMLReader();</pre></td></tr>
<tr> <td class="numLine">&nbsp;1266</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// More details at</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1267</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// http://xerces.apache.org/xerces2-j/features.html#namespaces</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1268</td> <td class="nbHitsCovered">&nbsp;1180</td> <td class="src"><pre class="src">&nbsp; xmlReader.setFeature(<span class="string">"http://xml.org/sax/features/namespaces"</span>, <span class="keyword">true</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1269</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// More details at</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1270</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// http://xerces.apache.org/xerces2-j/features.html#namespace-prefixes</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1271</td> <td class="nbHitsCovered">&nbsp;1180</td> <td class="src"><pre class="src">&nbsp; xmlReader.setFeature(<span class="string">"http://xml.org/sax/features/namespace-prefixes"</span>, <span class="keyword">true</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1272</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// More details at</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1273</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// http://xerces.apache.org/xerces2-j/features.html#xmlns-uris</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1274</td> <td class="nbHitsCovered">&nbsp;1180</td> <td class="src"><pre class="src">&nbsp; xmlReader.setFeature(<span class="string">"http://xml.org/sax/features/xmlns-uris"</span>, <span class="keyword">true</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1275</td> <td class="nbHitsCovered">&nbsp;1180</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> xmlReader;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1276</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1277</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1278</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Add the given path and all its subdirectories to the internalPath list</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1279</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// to be written later to the manifest</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1280</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> createSubEntries(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1281</td> <td class="nbHitsCovered">&nbsp;355</td> <td class="src"><pre class="src">&nbsp; ManifestElement manifestEle = getManifestDom().getRootElement();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1282</td> <td class="nbHitsCovered">&nbsp;355</td> <td class="src"><pre class="src">&nbsp; StringTokenizer tok = <span class="keyword">new</span> StringTokenizer(internalPath, SLASH);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1283</td> <td class="nbHitsCovered"><a title="Line 1283: Conditional coverage 100% (2/2).">&nbsp;355</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1283: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (tok.countTokens() &gt; 1) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1284</td> <td class="nbHitsCovered">&nbsp;340</td> <td class="src"><pre class="src">&nbsp; String path = EMPTY_STRING;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1285</td> <td class="nbHitsCovered"><a title="Line 1285: Conditional coverage 100% (2/2).">&nbsp;1084</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1285: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (tok.hasMoreTokens()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1286</td> <td class="nbHitsCovered">&nbsp;744</td> <td class="src"><pre class="src">&nbsp; String directory = tok.nextToken();</pre></td></tr>
<tr> <td class="numLine">&nbsp;1287</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// it is a directory, if there are more token</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1288</td> <td class="nbHitsCovered"><a title="Line 1288: Conditional coverage 100% (2/2).">&nbsp;744</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1288: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (tok.hasMoreTokens()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1289</td> <td class="nbHitsCovered">&nbsp;404</td> <td class="src"><pre class="src">&nbsp; path = path + directory + SLASH;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1290</td> <td class="nbHitsCovered">&nbsp;404</td> <td class="src"><pre class="src">&nbsp; OdfFileEntry fileEntry = mManifestEntries.get(path);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1291</td> <td class="nbHitsCovered"><a title="Line 1291: Conditional coverage 100% (2/2).">&nbsp;404</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1291: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (fileEntry == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1292</td> <td class="nbHitsCovered">&nbsp;114</td> <td class="src"><pre class="src">&nbsp; mManifestEntries.put(path, <span class="keyword">new</span> OdfFileEntry(manifestEle.newFileEntryElement(path, <span class="keyword">null</span>)));</pre></td></tr>
<tr> <td class="numLine">&nbsp;1293</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1294</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1295</td> <td class="nbHitsCovered">&nbsp;744</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1296</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1297</td> <td class="nbHitsCovered">&nbsp;355</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1298</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1299</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1300</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Insert DOM tree into OdfPackage. An existing file will be replaced.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1301</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1302</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param fileDOM</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1303</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - XML DOM tree to be inserted as file.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1304</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1305</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - relative documentURL where the DOM tree should be inserted</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1306</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * as XML file</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1307</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param mediaType</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1308</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - media type of stream. Set to null if unknown</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1309</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1310</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * when the DOM tree could not be inserted</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1311</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1312</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> insert(Document fileDOM, String internalPath, String mediaType) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1313</td> <td class="nbHitsCovered">&nbsp;1288</td> <td class="src"><pre class="src">&nbsp; internalPath = normalizeFilePath(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1314</td> <td class="nbHitsCovered"><a title="Line 1314: Conditional coverage 100% (2/2).">&nbsp;1288</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1314: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mediaType == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1315</td> <td class="nbHitsCovered">&nbsp;1198</td> <td class="src"><pre class="src">&nbsp; mediaType = XML_MEDIA_TYPE;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1316</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1317</td> <td class="nbHitsUncovered"><a title="Line 1317: Conditional coverage 50% (1/2).">&nbsp;1288</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1317: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (fileDOM == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1318</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mPkgDoms.remove(internalPath);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1319</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1320</td> <td class="nbHitsCovered">&nbsp;1288</td> <td class="src"><pre class="src">&nbsp; mPkgDoms.put(internalPath, fileDOM);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1321</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1322</td> <td class="nbHitsCovered"><a title="Line 1322: Conditional coverage 100% (2/2).">&nbsp;1288</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1322: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!internalPath.endsWith(OdfFile.MANIFEST.internalPath)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1323</td> <td class="nbHitsCovered">&nbsp;701</td> <td class="src"><pre class="src">&nbsp; updateFileEntry(ensureFileEntryExistence(internalPath), mediaType);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1324</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1325</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// remove byte array version of new DOM</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1326</td> <td class="nbHitsCovered">&nbsp;1288</td> <td class="src"><pre class="src">&nbsp; mMemoryFileCache.remove(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1327</td> <td class="nbHitsCovered">&nbsp;1288</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1328</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1329</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1330</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Embed an OdfPackageDocument to the current OdfPackage. All the file</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1331</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * entries of child document will be inserted.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1332</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1333</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param sourceDocument</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1334</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * the OdfPackageDocument to be embedded.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1335</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1336</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * path to the directory the ODF document should be inserted</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1337</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * (relative to ODF package root).</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1338</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1339</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> insertDocument(OdfPackageDocument sourceDocument, String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1340</td> <td class="nbHitsCovered">&nbsp;79</td> <td class="src"><pre class="src">&nbsp; internalPath = normalizeDirectoryPath(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1341</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// opened DOM of descendant Documents will be flashed to the their pkg</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1342</td> <td class="nbHitsCovered">&nbsp;79</td> <td class="src"><pre class="src">&nbsp; flushDoms(sourceDocument);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1343</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1344</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Gets the OdfDocument's manifest entry info, no matter it is a</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1345</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// independent document or an embeddedDocument.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1346</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; Map&lt;String, OdfFileEntry&gt; entryMapToCopy;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1347</td> <td class="nbHitsCovered"><a title="Line 1347: Conditional coverage 100% (2/2).">&nbsp;79</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1347: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (sourceDocument.isRootDocument()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1348</td> <td class="nbHitsCovered">&nbsp;15</td> <td class="src"><pre class="src">&nbsp; entryMapToCopy = sourceDocument.getPackage().getManifestEntries();</pre></td></tr>
<tr> <td class="numLine">&nbsp;1349</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1350</td> <td class="nbHitsCovered">&nbsp;64</td> <td class="src"><pre class="src">&nbsp; entryMapToCopy = sourceDocument.getPackage().getSubDirectoryEntries(<span class="keyword">this</span>, sourceDocument.getDocumentPath());</pre></td></tr>
<tr> <td class="numLine">&nbsp;1351</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1352</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// insert to package and add it to the Manifest</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1353</td> <td class="nbHitsCovered">&nbsp;79</td> <td class="src"><pre class="src">&nbsp; internalPath = sourceDocument.setDocumentPath(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1354</td> <td class="nbHitsCovered">&nbsp;79</td> <td class="src"><pre class="src">&nbsp; String documentDirectory = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1355</td> <td class="nbHitsCovered"><a title="Line 1355: Conditional coverage 100% (2/2).">&nbsp;79</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1355: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (internalPath.equals(SLASH)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1356</td> <td class="nbHitsCovered">&nbsp;18</td> <td class="src"><pre class="src">&nbsp; documentDirectory = EMPTY_STRING;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1357</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1358</td> <td class="nbHitsCovered">&nbsp;61</td> <td class="src"><pre class="src">&nbsp; documentDirectory = internalPath;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1359</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1360</td> <td class="nbHitsCovered">&nbsp;79</td> <td class="src"><pre class="src">&nbsp; Set&lt;String&gt; entryNameList = entryMapToCopy.keySet();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1361</td> <td class="nbHitsCovered"><a title="Line 1361: Conditional coverage 100% (2/2).">&nbsp;79</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1361: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String entryName : entryNameList) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1362</td> <td class="nbHitsCovered">&nbsp;441</td> <td class="src"><pre class="src">&nbsp; OdfFileEntry entry = entryMapToCopy.get(entryName);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1363</td> <td class="nbHitsUncovered"><a title="Line 1363: Conditional coverage 50% (1/2).">&nbsp;441</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1363: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (entry != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1364</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;1365</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if entry is a directory (e.g. an ODF document root)</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1366</td> <td class="nbHitsCovered"><a title="Line 1366: Conditional coverage 100% (2/2).">&nbsp;441</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1366: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (entryName.endsWith(SLASH)) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;1367</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// insert directory</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1368</td> <td class="nbHitsCovered"><a title="Line 1368: Conditional coverage 100% (2/2).">&nbsp;118</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1368: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (entryName.equals(SLASH)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1369</td> <td class="nbHitsCovered">&nbsp;15</td> <td class="src"><pre class="src">&nbsp; insert((<span class="keyword">byte</span>[]) <span class="keyword">null</span>, documentDirectory, sourceDocument.getMediaTypeString());</pre></td></tr>
<tr> <td class="numLine">&nbsp;1370</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1371</td> <td class="nbHitsCovered">&nbsp;103</td> <td class="src"><pre class="src">&nbsp; insert((<span class="keyword">byte</span>[]) <span class="keyword">null</span>, documentDirectory + entry.getPath(), entry.getMediaTypeString());</pre></td></tr>
<tr> <td class="numLine">&nbsp;1372</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1373</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1374</td> <td class="nbHitsCovered">&nbsp;323</td> <td class="src"><pre class="src">&nbsp; String packagePath = documentDirectory + entry.getPath();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1375</td> <td class="nbHitsCovered">&nbsp;323</td> <td class="src"><pre class="src">&nbsp; insert(sourceDocument.getPackage().getInputStream(entryName), packagePath, entry.getMediaTypeString());</pre></td></tr>
<tr> <td class="numLine">&nbsp;1376</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1377</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1378</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="keyword">null</span>, ex);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1379</td> <td class="nbHitsCovered">&nbsp;441</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1380</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1381</td> <td class="nbHitsCovered">&nbsp;441</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1382</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// make sure the media type of embedded Document is right set.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1383</td> <td class="nbHitsCovered">&nbsp;79</td> <td class="src"><pre class="src">&nbsp; ManifestElement manifestEle = mManifestDom.getRootElement();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1384</td> <td class="nbHitsCovered">&nbsp;79</td> <td class="src"><pre class="src">&nbsp; OdfFileEntry embedDocumentRootEntry = <span class="keyword">new</span> OdfFileEntry(manifestEle.newFileEntryElement(internalPath, sourceDocument.getMediaTypeString()));</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1385</td> <td class="nbHitsCovered">&nbsp;79</td> <td class="src"><pre class="src">&nbsp; mManifestEntries.put(internalPath, embedDocumentRootEntry);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1386</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// the new document will be attached to its new package (it has been</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1387</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// inserted to)</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1388</td> <td class="nbHitsCovered">&nbsp;79</td> <td class="src"><pre class="src">&nbsp; sourceDocument.setPackage(<span class="keyword">this</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1389</td> <td class="nbHitsCovered">&nbsp;79</td> <td class="src"><pre class="src">&nbsp; cacheDocument(sourceDocument, internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1390</td> <td class="nbHitsCovered">&nbsp;79</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1391</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1392</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1393</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Insert all open DOMs of XML files beyond parent document to the package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1394</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * The XML files will be updated in the package after calling save.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1395</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1396</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param parentDocument</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1397</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * the document, which XML files shall be serialized</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1398</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1399</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">void</span> flushDoms(OdfPackageDocument parentDocument) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1400</td> <td class="nbHitsCovered">&nbsp;158</td> <td class="src"><pre class="src">&nbsp; OdfPackage pkg = parentDocument.getPackage();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1401</td> <td class="nbHitsCovered"><a title="Line 1401: Conditional coverage 100% (2/2).">&nbsp;158</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1401: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (parentDocument.isRootDocument()) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;1402</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// for every parsed XML file (DOM)</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1403</td> <td class="nbHitsCovered"><a title="Line 1403: Conditional coverage 100% (2/2).">&nbsp;30</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1403: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String xmlFilePath : pkg.getCachedDoms().keySet()) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;1404</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// insert it to the package (serializing and caching it till</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1405</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// final save)</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1406</td> <td class="nbHitsCovered">&nbsp;30</td> <td class="src"><pre class="src">&nbsp; pkg.insert(pkg.getCachedDom(xmlFilePath), xmlFilePath, <span class="string">"text/xml"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1407</td> <td class="nbHitsCovered">&nbsp;30</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1408</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;1409</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if not root document, check ..</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1410</td> <td class="nbHitsCovered">&nbsp;128</td> <td class="src"><pre class="src">&nbsp; String parentDocumentPath = parentDocument.getDocumentPath();</pre></td></tr>
<tr> <td class="numLine">&nbsp;1411</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// for every parsed XML file (DOM)</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1412</td> <td class="nbHitsCovered"><a title="Line 1412: Conditional coverage 100% (2/2).">&nbsp;128</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1412: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String xmlFilePath : pkg.getCachedDoms().keySet()) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;1413</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if the file is within the given document</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1414</td> <td class="nbHitsCovered"><a title="Line 1414: Conditional coverage 100% (2/2).">&nbsp;376</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1414: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (xmlFilePath.startsWith(parentDocumentPath)) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;1415</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// insert it to the package (serializing and caching it till</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1416</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// final save)</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1417</td> <td class="nbHitsCovered">&nbsp;60</td> <td class="src"><pre class="src">&nbsp; pkg.insert(pkg.getCachedDom(xmlFilePath), xmlFilePath, <span class="string">"text/xml"</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1418</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1419</td> <td class="nbHitsCovered">&nbsp;376</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1420</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1421</td> <td class="nbHitsCovered">&nbsp;158</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1422</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1423</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/** Get all the file entries from a sub directory */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1424</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> Map&lt;String, OdfFileEntry&gt; getSubDirectoryEntries(OdfPackage destinationPackage, String directory) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1425</td> <td class="nbHitsCovered">&nbsp;64</td> <td class="src"><pre class="src">&nbsp; directory = normalizeDirectoryPath(directory);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1426</td> <td class="nbHitsCovered">&nbsp;64</td> <td class="src"><pre class="src">&nbsp; Map&lt;String, OdfFileEntry&gt; subEntries = <span class="keyword">new</span> HashMap&lt;String, OdfFileEntry&gt;();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1427</td> <td class="nbHitsCovered">&nbsp;64</td> <td class="src"><pre class="src">&nbsp; Map&lt;String, OdfFileEntry&gt; allEntries = getManifestEntries();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1428</td> <td class="nbHitsCovered">&nbsp;64</td> <td class="src"><pre class="src">&nbsp; Set&lt;String&gt; rootEntryNameSet = getFilePaths();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1429</td> <td class="nbHitsCovered">&nbsp;64</td> <td class="src"><pre class="src">&nbsp; ManifestElement manifestEle = destinationPackage.getManifestDom().getRootElement();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1430</td> <td class="nbHitsCovered"><a title="Line 1430: Conditional coverage 100% (2/2).">&nbsp;64</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1430: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String entryName : rootEntryNameSet) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1431</td> <td class="nbHitsCovered"><a title="Line 1431: Conditional coverage 100% (2/2).">&nbsp;5146</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1431: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (entryName.startsWith(directory)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1432</td> <td class="nbHitsCovered">&nbsp;368</td> <td class="src"><pre class="src">&nbsp; String newEntryName = entryName.substring(directory.length());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1433</td> <td class="nbHitsCovered"><a title="Line 1433: Conditional coverage 100% (2/2).">&nbsp;368</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1433: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (newEntryName.length() == 0) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1434</td> <td class="nbHitsCovered">&nbsp;64</td> <td class="src"><pre class="src">&nbsp; newEntryName = SLASH;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1435</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1436</td> <td class="nbHitsCovered">&nbsp;368</td> <td class="src"><pre class="src">&nbsp; OdfFileEntry srcFileEntry = allEntries.get(entryName);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1437</td> <td class="nbHitsCovered">&nbsp;368</td> <td class="src"><pre class="src">&nbsp; OdfFileEntry newFileEntry = <span class="keyword">new</span> OdfFileEntry(manifestEle.newFileEntryElement(newEntryName, srcFileEntry.getMediaTypeString()));</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1438</td> <td class="nbHitsCovered">&nbsp;368</td> <td class="src"><pre class="src">&nbsp; newFileEntry.setEncryptionData(srcFileEntry.getEncryptionData());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1439</td> <td class="nbHitsCovered">&nbsp;368</td> <td class="src"><pre class="src">&nbsp; newFileEntry.setSize(srcFileEntry.getSize());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1440</td> <td class="nbHitsCovered">&nbsp;368</td> <td class="src"><pre class="src">&nbsp; subEntries.put(entryName, newFileEntry);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1441</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1442</td> <td class="nbHitsCovered">&nbsp;5146</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1443</td> <td class="nbHitsCovered">&nbsp;64</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> subEntries;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1444</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1445</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1446</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1447</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Method returns the paths of all document within the package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1448</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1449</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return A set of paths of all documents of the package, including the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1450</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * root document.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1451</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1452</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> Set&lt;String&gt; getDocumentPaths() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1453</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> getDocumentPaths(<span class="keyword">null</span>, <span class="keyword">null</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1454</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1455</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1456</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1457</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Method returns the paths of all document within the package matching the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1458</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * given criteria.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1459</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1460</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param mediaTypeString</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1461</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * limits the desired set of document paths to documents of the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1462</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * given mediaType</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1463</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return A set of paths of all documents of the package, including the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1464</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * root document, that match the given parameter.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1465</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1466</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> Set&lt;String&gt; getDocumentPaths(String mediaTypeString) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1467</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> getDocumentPaths(mediaTypeString, <span class="keyword">null</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1468</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1469</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1470</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1471</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Method returns the paths of all document within the package matching the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1472</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * given criteria.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1473</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1474</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param mediaTypeString</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1475</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * limits the desired set of document paths to documents of the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1476</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * given mediaType</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1477</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param subDirectory</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1478</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * limits the desired set document paths to those documents below</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1479</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * of this subdirectory</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1480</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return A set of paths of all documents of the package, including the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1481</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * root document, that match the given parameter.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1482</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1483</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; Set&lt;String&gt; getDocumentPaths(String mediaTypeString, String subDirectory) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1484</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; Set&lt;String&gt; innerDocuments = <span class="keyword">new</span> HashSet&lt;String&gt;();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1485</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; Set&lt;String&gt; packageFilePaths = getFilePaths();</pre></td></tr>
<tr> <td class="numLine">&nbsp;1486</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// check manifest for current embedded OdfPackageDocuments</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1487</td> <td class="nbHitsCovered"><a title="Line 1487: Conditional coverage 100% (2/2).">&nbsp;2</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1487: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String filePath : packageFilePaths) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;1488</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// check if a subdirectory was the criteria and if the files are</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1489</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// beyond the given subdirectory</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1490</td> <td class="nbHitsUncovered"><a title="Line 1490: Conditional coverage 16% (1/6) [each condition: 50%, 0%, 0%].">&nbsp;146</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1490: Conditional coverage 16% (1/6) [each condition: 50%, 0%, 0%]."> <span class="keyword">if</span> (subDirectory == <span class="keyword">null</span> || filePath.startsWith(subDirectory) &amp;&amp; !filePath.equals(subDirectory)) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1491</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// with documentURL is not empty and is a directory (ie. a</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1492</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// potential document)</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1493</td> <td class="nbHitsCovered"><a title="Line 1493: Conditional coverage 100% (4/4) [each condition: 100%, 100%].">&nbsp;146</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1493: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (filePath.length() &gt; 1 &amp;&amp; filePath.endsWith(SLASH)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1494</td> <td class="nbHitsCovered">&nbsp;46</td> <td class="src"><pre class="src">&nbsp; String fileMediaType = getFileEntry(filePath).getMediaTypeString();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1495</td> <td class="nbHitsUncovered"><a title="Line 1495: Conditional coverage 75% (3/4) [each condition: 50%, 100%].">&nbsp;46</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1495: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> <span class="keyword">if</span> (fileMediaType != <span class="keyword">null</span> &amp;&amp; !fileMediaType.equals(EMPTY_STRING)) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1496</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// check if a certain mediaType was the critera and was</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1497</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// matched</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1498</td> <td class="nbHitsUncovered"><a title="Line 1498: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;22</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1498: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (mediaTypeString == <span class="keyword">null</span> || mediaTypeString.equals(fileMediaType)) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1499</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// only relative path is allowed as path</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1500</td> <td class="nbHitsCovered">&nbsp;11</td> <td class="src"><pre class="src">&nbsp; innerDocuments.add(filePath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1501</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1502</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1503</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1504</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1505</td> <td class="nbHitsCovered">&nbsp;146</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1506</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> innerDocuments;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1507</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1508</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1509</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1510</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Adding a manifest:file-entry to be saved in manifest.xml. In addition,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1511</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * sub directories will be added as well to the manifest.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1512</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1513</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> OdfFileEntry ensureFileEntryExistence(String internalPath) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;1514</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if it is NOT the resource "/META-INF/manifest.xml"</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1515</td> <td class="nbHitsCovered">&nbsp;6207</td> <td class="src"><pre class="src">&nbsp; OdfFileEntry fileEntry = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1516</td> <td class="nbHitsUncovered"><a title="Line 1516: Conditional coverage 25% (1/4) [each condition: 50%, 0%].">&nbsp;6207</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1516: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> <span class="keyword">if</span> (!OdfFile.MANIFEST.internalPath.equals(internalPath) || !internalPath.equals(EMPTY_STRING)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1517</td> <td class="nbHitsUncovered"><a title="Line 1517: Conditional coverage 50% (1/2).">&nbsp;6207</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1517: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (mManifestEntries == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1518</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mManifestEntries = <span class="keyword">new</span> HashMap&lt;String, OdfFileEntry&gt;();</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1519</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1520</td> <td class="nbHitsCovered">&nbsp;6207</td> <td class="src"><pre class="src">&nbsp; fileEntry = mManifestEntries.get(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1521</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// for every new file entry</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1522</td> <td class="nbHitsCovered"><a title="Line 1522: Conditional coverage 100% (2/2).">&nbsp;6207</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1522: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (fileEntry == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1523</td> <td class="nbHitsCovered">&nbsp;356</td> <td class="src"><pre class="src">&nbsp; ManifestElement manifestEle = getManifestDom().getRootElement();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1524</td> <td class="nbHitsCovered"><a title="Line 1524: Conditional coverage 100% (2/2).">&nbsp;356</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1524: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (manifestEle == <span class="keyword">null</span>)</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1525</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1526</td> <td class="nbHitsCovered">&nbsp;355</td> <td class="src"><pre class="src">&nbsp; fileEntry = <span class="keyword">new</span> OdfFileEntry(manifestEle.newFileEntryElement(internalPath, <span class="string">""</span>));</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1527</td> <td class="nbHitsCovered">&nbsp;355</td> <td class="src"><pre class="src">&nbsp; mManifestEntries.put(internalPath, fileEntry);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1528</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// creates recursive file entries for all sub directories</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1529</td> <td class="nbHitsCovered">&nbsp;355</td> <td class="src"><pre class="src">&nbsp; createSubEntries(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1530</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1531</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1532</td> <td class="nbHitsCovered">&nbsp;6206</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> fileEntry;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1533</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1534</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1535</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1536</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * update file entry setting.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1537</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1538</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> updateFileEntry(OdfFileEntry fileEntry, String mediaType) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;1539</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// overwrite previous settings</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1540</td> <td class="nbHitsCovered">&nbsp;1979</td> <td class="src"><pre class="src">&nbsp; fileEntry.setMediaTypeString(mediaType);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1541</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// reset encryption data (ODFDOM does not support encryption yet)</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1542</td> <td class="nbHitsCovered">&nbsp;1979</td> <td class="src"><pre class="src">&nbsp; fileEntry.setEncryptionData(<span class="keyword">null</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1543</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// reset size to be unset</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1544</td> <td class="nbHitsCovered">&nbsp;1979</td> <td class="src"><pre class="src">&nbsp; fileEntry.setSize(<span class="keyword">null</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1545</td> <td class="nbHitsCovered">&nbsp;1979</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1546</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1547</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1548</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Gets org.w3c.dom.Document for XML file contained in package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1549</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1550</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1551</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * to a file within the Odf Package (eg. content.xml)</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1552</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return an org.w3c.dom.Document</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1553</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws SAXException</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1554</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws ParserConfigurationException</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1555</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws IOException</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1556</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws IllegalArgumentException</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1557</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws TransformerConfigurationException</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1558</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws TransformerException</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1559</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1560</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> Document getDom(String internalPath) <span class="keyword">throws</span> SAXException, ParserConfigurationException, IllegalArgumentException, TransformerConfigurationException, TransformerException, IOException {</pre></td></tr>
<tr> <td class="numLine">&nbsp;1561</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1562</td> <td class="nbHitsCovered">&nbsp;26</td> <td class="src"><pre class="src">&nbsp; Document doc = mPkgDoms.get(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1563</td> <td class="nbHitsCovered"><a title="Line 1563: Conditional coverage 100% (2/2).">&nbsp;26</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1563: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (doc != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1564</td> <td class="nbHitsCovered">&nbsp;16</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> doc;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1565</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1566</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1567</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; InputStream is = getInputStream(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1568</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1569</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// We depend on Xerces. So we just go ahead and create a Xerces DBF,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1570</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// without</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1571</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// forcing everything else to do so.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1572</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; DocumentBuilderFactory factory = <span class="keyword">new</span> org.apache.xerces.jaxp.DocumentBuilderFactoryImpl();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1573</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; factory.setNamespaceAware(<span class="keyword">true</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1574</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; factory.setValidating(<span class="keyword">false</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1575</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1576</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; DocumentBuilder builder = factory.newDocumentBuilder();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1577</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; builder.setEntityResolver(getEntityResolver());</pre></td></tr>
<tr> <td class="numLine">&nbsp;1578</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1579</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; String uri = getBaseURI() + internalPath;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1580</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1581</td> <td class="nbHitsUncovered"><a title="Line 1581: Conditional coverage 50% (1/2).">&nbsp;10</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1581: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (mErrorHandler != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1582</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; builder.setErrorHandler(mErrorHandler);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1583</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1584</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1585</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; InputSource ins = <span class="keyword">new</span> InputSource(is);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1586</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; ins.setSystemId(uri);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1587</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1588</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; doc = builder.parse(ins);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1589</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1590</td> <td class="nbHitsUncovered"><a title="Line 1590: Conditional coverage 50% (1/2).">&nbsp;10</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1590: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (doc != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1591</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; mPkgDoms.put(internalPath, doc);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1592</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; mMemoryFileCache.remove(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1593</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1594</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> doc;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1595</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1596</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1597</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1598</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Inserts an external file into an OdfPackage. An existing file will be</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1599</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * replaced.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1600</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1601</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param sourceURI</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1602</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - the source URI to the file to be inserted into the package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1603</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1604</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - relative documentURL where the tree should be inserted as</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1605</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * XML file</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1606</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param mediaType</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1607</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - media type of stream. Set to null if unknown</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1608</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1609</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * In case the file could not be saved</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1610</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1611</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> insert(URI sourceURI, String internalPath, String mediaType) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1612</td> <td class="nbHitsCovered">&nbsp;17</td> <td class="src"><pre class="src">&nbsp; InputStream is = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1613</td> <td class="nbHitsCovered"><a title="Line 1613: Conditional coverage 100% (2/2).">&nbsp;17</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1613: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (sourceURI.isAbsolute()) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;1614</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if the URI is absolute it can be converted to URL</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1615</td> <td class="nbHitsCovered">&nbsp;14</td> <td class="src"><pre class="src">&nbsp; is = sourceURI.toURL().openStream();</pre></td></tr>
<tr> <td class="numLine">&nbsp;1616</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;1617</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// otherwise create a file class to open the stream</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1618</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; is = <span class="keyword">new</span> FileInputStream(sourceURI.toString());</pre></td></tr>
<tr> <td class="numLine">&nbsp;1619</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1620</td> <td class="nbHitsCovered">&nbsp;17</td> <td class="src"><pre class="src">&nbsp; insert(is, internalPath, mediaType);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1621</td> <td class="nbHitsCovered">&nbsp;17</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1622</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1623</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1624</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Inserts InputStream into an OdfPackage. An existing file will be</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1625</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * replaced.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1626</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1627</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param fileStream</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1628</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - the stream of the file to be inserted into the ODF package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1629</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1630</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - relative documentURL where the tree should be inserted as</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1631</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * XML file</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1632</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param mediaType</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1633</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - media type of stream. Set to null if unknown</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1634</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1635</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> insert(InputStream fileStream, String internalPath, String mediaType) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1636</td> <td class="nbHitsCovered">&nbsp;407</td> <td class="src"><pre class="src">&nbsp; internalPath = normalizeFilePath(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1637</td> <td class="nbHitsCovered"><a title="Line 1637: Conditional coverage 100% (2/2).">&nbsp;407</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1637: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (fileStream == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;1638</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// adding a simple directory without MIMETYPE</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1639</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; insert((<span class="keyword">byte</span>[]) <span class="keyword">null</span>, internalPath, mediaType);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1640</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1641</td> <td class="nbHitsCovered">&nbsp;402</td> <td class="src"><pre class="src">&nbsp; ByteArrayOutputStream baos = <span class="keyword">new</span> ByteArrayOutputStream();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1642</td> <td class="nbHitsCovered">&nbsp;402</td> <td class="src"><pre class="src">&nbsp; BufferedInputStream bis = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1643</td> <td class="nbHitsCovered"><a title="Line 1643: Conditional coverage 100% (2/2).">&nbsp;402</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1643: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (fileStream <span class="keyword">instanceof</span> BufferedInputStream) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1644</td> <td class="nbHitsCovered">&nbsp;14</td> <td class="src"><pre class="src">&nbsp; bis = (BufferedInputStream) fileStream;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1645</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1646</td> <td class="nbHitsCovered">&nbsp;388</td> <td class="src"><pre class="src">&nbsp; bis = <span class="keyword">new</span> BufferedInputStream(fileStream);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1647</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1648</td> <td class="nbHitsCovered">&nbsp;402</td> <td class="src"><pre class="src">&nbsp; StreamHelper.transformStream(bis, baos);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1649</td> <td class="nbHitsCovered">&nbsp;402</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] data = baos.toByteArray();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1650</td> <td class="nbHitsCovered">&nbsp;402</td> <td class="src"><pre class="src">&nbsp; insert(data, internalPath, mediaType);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1651</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1652</td> <td class="nbHitsCovered">&nbsp;407</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1653</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1654</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1655</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Inserts a byte array into OdfPackage. An existing file will be replaced.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1656</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * If the byte array is NULL a directory with the given mimetype will be</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1657</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * created.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1658</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1659</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param fileBytes</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1660</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - data of the file stream to be stored in package. If NULL a</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1661</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * directory with the given mimetype will be created.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1662</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1663</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - path of the file or directory relative to the package root.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1664</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param mediaTypeString</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1665</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - media type of stream. If unknown null can be used.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1666</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1667</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> insert(<span class="keyword">byte</span>[] fileBytes, String internalPath, String mediaTypeString) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1668</td> <td class="nbHitsCovered">&nbsp;527</td> <td class="src"><pre class="src">&nbsp; internalPath = normalizeFilePath(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1669</td> <td class="nbHitsUncovered"><a title="Line 1669: Conditional coverage 50% (1/2).">&nbsp;527</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1669: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (OdfPackage.OdfFile.MEDIA_TYPE.getPath().equals(internalPath)) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1670</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1671</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; setMediaTypeString(<span class="keyword">new</span> String(fileBytes, <span class="string">"UTF-8"</span>));</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1672</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (UnsupportedEncodingException useEx) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1673</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="string">"ODF file could not be created as string!"</span>, useEx);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1674</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1675</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1676</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1677</td> <td class="nbHitsCovered"><a title="Line 1677: Conditional coverage 100% (2/2).">&nbsp;527</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1677: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (fileBytes != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1678</td> <td class="nbHitsCovered">&nbsp;404</td> <td class="src"><pre class="src">&nbsp; mMemoryFileCache.put(internalPath, fileBytes);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1679</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// as DOM would overwrite data cache, any existing DOM cache will be</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1680</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// deleted</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1681</td> <td class="nbHitsUncovered"><a title="Line 1681: Conditional coverage 50% (1/2).">&nbsp;404</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1681: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (mPkgDoms.containsKey(internalPath)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1682</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mPkgDoms.remove(internalPath);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1683</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1684</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1685</td> <td class="nbHitsCovered">&nbsp;527</td> <td class="src"><pre class="src">&nbsp; updateFileEntry(ensureFileEntryExistence(internalPath), mediaTypeString);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1686</td> <td class="nbHitsCovered">&nbsp;527</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1687</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1688</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// changed to package access as the manifest interiors are an implementation</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1689</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// detail</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1690</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; Map&lt;String, OdfFileEntry&gt; getManifestEntries() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1691</td> <td class="nbHitsCovered">&nbsp;2864</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> mManifestEntries;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1692</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1693</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1694</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1695</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Get package (sub-) content as byte array</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1696</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1697</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1698</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * relative documentURL to the package content</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1699</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return the unzipped package content as byte array</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1700</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1701</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1702</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">byte</span>[] getBytes(String internalPath) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;1703</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if path is null or empty return null</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1704</td> <td class="nbHitsUncovered"><a title="Line 1704: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;3949</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1704: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (internalPath == <span class="keyword">null</span> || internalPath.equals(EMPTY_STRING)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1705</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1706</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1707</td> <td class="nbHitsCovered">&nbsp;3949</td> <td class="src"><pre class="src">&nbsp; internalPath = normalizeFilePath(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1708</td> <td class="nbHitsCovered">&nbsp;3949</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] data = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1709</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if the file is "mimetype"</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1710</td> <td class="nbHitsUncovered"><a title="Line 1710: Conditional coverage 50% (1/2).">&nbsp;3949</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1710: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (internalPath.equals(OdfPackage.OdfFile.MEDIA_TYPE.getPath())) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1711</td> <td class="nbHitsUncovered"><a title="Line 1711: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1711: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (mMediaType == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1712</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1713</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;1714</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1715</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; data = mMediaType.getBytes(<span class="string">"UTF-8"</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1716</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (UnsupportedEncodingException use) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1717</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="keyword">null</span>, use);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1718</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1719</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1720</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1721</td> <td class="nbHitsCovered"><a title="Line 1721: Conditional coverage 100% (2/2).">&nbsp;3949</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1721: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (mPkgDoms.get(internalPath) != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1722</td> <td class="nbHitsCovered">&nbsp;672</td> <td class="src"><pre class="src">&nbsp; data = flushDom(mPkgDoms.get(internalPath));</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1723</td> <td class="nbHitsCovered">&nbsp;672</td> <td class="src"><pre class="src">&nbsp; mMemoryFileCache.put(internalPath, data);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1724</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if the path's file was cached to memory (second high priority)</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1725</td> <td class="nbHitsCovered"><a title="Line 1725: Conditional coverage 100% (4/4) [each condition: 100%, 100%].">&nbsp;3277</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1725: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> } <span class="keyword">else</span> <span class="keyword">if</span> (mManifestEntries.containsKey(internalPath) &amp;&amp; mMemoryFileCache.get(internalPath) != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1726</td> <td class="nbHitsCovered">&nbsp;430</td> <td class="src"><pre class="src">&nbsp; data = mMemoryFileCache.get(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1727</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1728</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if the path's file was cached to disc (lowest priority)</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1729</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1730</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if not available, check if file exists in ZIP</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1731</td> <td class="nbHitsCovered"><a title="Line 1731: Conditional coverage 100% (2/2).">&nbsp;3949</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1731: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (data == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1732</td> <td class="nbHitsCovered">&nbsp;2847</td> <td class="src"><pre class="src">&nbsp; ZipEntry entry = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1733</td> <td class="nbHitsCovered"><a title="Line 1733: Conditional coverage 100% (2/2).">&nbsp;2847</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1733: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> ((entry = mZipEntries.get(internalPath)) != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1734</td> <td class="nbHitsCovered">&nbsp;2783</td> <td class="src"><pre class="src">&nbsp; InputStream inputStream = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1735</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1736</td> <td class="nbHitsCovered">&nbsp;2783</td> <td class="src"><pre class="src">&nbsp; inputStream = mZipFile.getInputStream(entry);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1737</td> <td class="nbHitsUncovered"><a title="Line 1737: Conditional coverage 50% (1/2).">&nbsp;2783</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1737: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (inputStream != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1738</td> <td class="nbHitsCovered">&nbsp;2783</td> <td class="src"><pre class="src">&nbsp; ByteArrayOutputStream out = <span class="keyword">new</span> ByteArrayOutputStream();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1739</td> <td class="nbHitsCovered">&nbsp;2783</td> <td class="src"><pre class="src">&nbsp; StreamHelper.transformStream(inputStream, out);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1740</td> <td class="nbHitsCovered">&nbsp;2783</td> <td class="src"><pre class="src">&nbsp; data = out.toByteArray();</pre></td></tr>
<tr> <td class="numLine">&nbsp;1741</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// decrypt data as needed</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1742</td> <td class="nbHitsUncovered"><a title="Line 1742: Conditional coverage 75% (3/4) [each condition: 50%, 100%].">&nbsp;2783</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1742: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> <span class="keyword">if</span> (!(internalPath.equals(OdfFile.MEDIA_TYPE.getPath()) || internalPath.equals(OdfFile.MANIFEST.getPath()))) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1743</td> <td class="nbHitsCovered">&nbsp;2229</td> <td class="src"><pre class="src">&nbsp; OdfFileEntry manifestEntry = getManifestEntries().get(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1744</td> <td class="nbHitsCovered">&nbsp;2229</td> <td class="src"><pre class="src">&nbsp; EncryptionDataElement encryptionDataElement = manifestEntry.getEncryptionData();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1745</td> <td class="nbHitsCovered"><a title="Line 1745: Conditional coverage 100% (2/2).">&nbsp;2229</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1745: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (encryptionDataElement != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1746</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; data = decryptData(data, manifestEntry, encryptionDataElement);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1747</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1748</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1749</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// store for further usage; do not care about manifest:</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1750</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// that is handled exclusively</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1751</td> <td class="nbHitsCovered">&nbsp;2783</td> <td class="src"><pre class="src">&nbsp; mMemoryFileCache.put(internalPath, data);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1752</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1753</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (IOException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1754</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="keyword">null</span>, ex);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1755</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">finally</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1756</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">try</span> {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1757</td> <td class="nbHitsUncovered"><a title="Line 1757: Conditional coverage 50% (1/2).">&nbsp;2783</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1757: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (inputStream != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1758</td> <td class="nbHitsCovered">&nbsp;2783</td> <td class="src"><pre class="src">&nbsp; inputStream.close();</pre></td></tr>
<tr> <td class="numLine">&nbsp;1759</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1760</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (IOException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1761</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="keyword">null</span>, ex);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1762</td> <td class="nbHitsCovered">&nbsp;2783</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1763</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1764</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1765</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1766</td> <td class="nbHitsCovered">&nbsp;3949</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> data;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1767</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1768</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1769</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// encrypt data and update manifest.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1770</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">byte</span>[] encryptData(<span class="keyword">byte</span>[] data, OdfFileEntry fileEntry) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1771</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] encryptedData = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1772</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;1773</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// 1.The original uncompressed, unencrypted size is</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1774</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// contained in the manifest:size.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1775</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; fileEntry.setSize(data.length);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1776</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1777</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// 2.Compress with the "deflate" algorithm</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1778</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; Deflater compresser = <span class="keyword">new</span> Deflater(Deflater.DEFLATED, <span class="keyword">true</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1779</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; compresser.setInput(data);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1780</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; compresser.finish();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1781</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] compressedData = <span class="keyword">new</span> <span class="keyword">byte</span>[data.length];</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1782</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> compressedDataLength = compresser.deflate(compressedData);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1783</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1784</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// 3. The start key is generated: the byte sequence</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1785</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// representing the password in UTF-8 is used to</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1786</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// generate a 20-byte SHA1 digest.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1787</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] passBytes = newPwd.getBytes(<span class="string">"UTF-8"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1788</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; MessageDigest md = MessageDigest.getInstance(<span class="string">"SHA1"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1789</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; passBytes = md.digest(passBytes);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1790</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// 4. Checksum specifies a digest in BASE64 encoding</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1791</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// that can be used to detect password correctness. The</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1792</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// digest is build from the compressed unencrypted file.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1793</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; md.reset();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1794</td> <td class="nbHitsCovered"><a title="Line 1794: Conditional coverage 100% (2/2).">&nbsp;4</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1794: Conditional coverage 100% (2/2)."> md.update(compressedData, 0, (compressedDataLength &gt; 1024 ? 1024 : compressedDataLength));</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1795</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] checksumBytes = <span class="keyword">new</span> <span class="keyword">byte</span>[20];</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1796</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; md.digest(checksumBytes, 0, 20);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1797</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1798</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// 5. For each file, a 16-byte salt is generated by a random</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1799</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// generator.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1800</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// The salt is a BASE64 encoded binary sequence.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1801</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; SecureRandom secureRandom = SecureRandom.getInstance(<span class="string">"SHA1PRNG"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1802</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] salt = <span class="keyword">new</span> <span class="keyword">byte</span>[16];</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1803</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; secureRandom.nextBytes(salt);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1804</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1805</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// char passChars[] = new String(passBytes, "UTF-8").toCharArray();</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1806</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/*</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1807</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * char passChars[] = new char[20]; for (int i = 0; i &lt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1808</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * passBytes.length; i++) { passChars[i] = (char)</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1809</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * ((passBytes[i]+256)%256);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1810</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * //System.out.println("passChars[i]:"+passChars</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1811</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * [i]+", passBytes[i]"+passBytes[i]); } //char passChars[] =</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1812</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * getChars(passBytes); // 6. The PBKDF2 algorithm based on the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1813</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * HMAC-SHA-1 function is used for the key derivation.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1814</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * SecretKeyFactory factory =</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1815</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); // 7. The</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1816</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * salt is used together with the start key to derive a unique</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1817</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * 128-bit key for each file. // The default iteration count for the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1818</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * algorithm is 1024. KeySpec spec = new PBEKeySpec(passChars, salt,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1819</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * 1024, 128); SecretKey skey = factory.generateSecret(spec); byte[]</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1820</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * raw = skey.getEncoded(); // algorithm-name="Blowfish CFB"</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1821</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * SecretKeySpec skeySpec = new SecretKeySpec(raw, "Blowfish");</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1822</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1823</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1824</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] dk = derivePBKDF2Key(passBytes, salt, 1024, 16);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1825</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; SecretKeySpec key = <span class="keyword">new</span> SecretKeySpec(dk, <span class="string">"Blowfish"</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1826</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// 8.The files are encrypted: The random number</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1827</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// generator is used to generate the 8-byte initialization vector</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1828</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// for the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1829</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// algorithm. The derived key is used together with the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1830</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// initialization</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1831</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// vector to encrypt the file using the Blowfish algorithm in cipher</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1832</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// feedback</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1833</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// CFB mode.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1834</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; Cipher cipher = Cipher.getInstance(<span class="string">"Blowfish/CFB/NoPadding"</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1835</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// initialisation-vector specifies the byte-sequence used</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1836</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// as an initialization vector to a encryption algorithm. The</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1837</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// initialization vector is a BASE64 encoded binary sequence.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1838</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] iv = <span class="keyword">new</span> <span class="keyword">byte</span>[8];</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1839</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; secureRandom.nextBytes(iv);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1840</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; IvParameterSpec ivParameterSpec = <span class="keyword">new</span> IvParameterSpec(iv);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1841</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; cipher.init(Cipher.ENCRYPT_MODE, key, ivParameterSpec);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1842</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; encryptedData = cipher.doFinal(compressedData, 0, compressedDataLength);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1843</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1844</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// 9.update file entry encryption data.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1845</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; String checksum = <span class="keyword">new</span> Base64Binary(checksumBytes).toString();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1846</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; FileEntryElement fileEntryElement = fileEntry.getOdfElement();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1847</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; EncryptionDataElement encryptionDataElement = OdfElement.findFirstChildNode(EncryptionDataElement.<span class="keyword">class</span>, fileEntryElement);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1848</td> <td class="nbHitsUncovered"><a title="Line 1848: Conditional coverage 50% (1/2).">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1848: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (encryptionDataElement != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1849</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; fileEntryElement.removeChild(encryptionDataElement);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1850</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1851</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; encryptionDataElement = fileEntryElement.newEncryptionDataElement(checksum, <span class="string">"SHA1/1K"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1852</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; String initialisationVector = <span class="keyword">new</span> Base64Binary(iv).toString();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1853</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; AlgorithmElement algorithmElement = OdfElement.findFirstChildNode(AlgorithmElement.<span class="keyword">class</span>, encryptionDataElement);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1854</td> <td class="nbHitsUncovered"><a title="Line 1854: Conditional coverage 50% (1/2).">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1854: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (algorithmElement != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1855</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; encryptionDataElement.removeChild(algorithmElement);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1856</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1857</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; algorithmElement = encryptionDataElement.newAlgorithmElement(<span class="string">"Blowfish CFB"</span>, initialisationVector);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1858</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; String saltStr = <span class="keyword">new</span> Base64Binary(salt).toString();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1859</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; KeyDerivationElement keyDerivationElement = OdfElement.findFirstChildNode(KeyDerivationElement.<span class="keyword">class</span>, encryptionDataElement);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1860</td> <td class="nbHitsUncovered"><a title="Line 1860: Conditional coverage 50% (1/2).">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1860: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (keyDerivationElement != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1861</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; encryptionDataElement.removeChild(keyDerivationElement);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1862</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1863</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; keyDerivationElement = encryptionDataElement.newKeyDerivationElement(1024, <span class="string">"PBKDF2"</span>, saltStr);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1864</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; StartKeyGenerationElement startKeyGenerationElement = OdfElement.findFirstChildNode(StartKeyGenerationElement.<span class="keyword">class</span>, encryptionDataElement);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1865</td> <td class="nbHitsUncovered"><a title="Line 1865: Conditional coverage 50% (1/2).">&nbsp;4</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1865: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (startKeyGenerationElement != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1866</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; encryptionDataElement.removeChild(startKeyGenerationElement);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1867</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1868</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; encryptionDataElement.newStartKeyGenerationElement(<span class="string">"SHA1"</span>).setKeySizeAttribute(20);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1869</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1870</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// System.out.println("full-path=\""+ path +"\"");</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1871</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// System.out.println("size=\""+ data.length +"\"");</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1872</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// System.out.println("checksum=\""+ checksum +"\"");</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1873</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// System.out.println("compressedData ="+compressedDataLength);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1874</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1875</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception e) {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1876</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// throws NoSuchAlgorithmException,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1877</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// InvalidKeySpecException, NoSuchPaddingException,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1878</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// InvalidKeyException,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1879</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// InvalidAlgorithmParameterException,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1880</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// IllegalBlockSizeException, BadPaddingException</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1881</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="keyword">null</span>, e);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1882</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1883</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> encryptedData;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1884</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1885</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1886</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">byte</span>[] decryptData(<span class="keyword">byte</span>[] data, OdfFileEntry manifestEntry, EncryptionDataElement encryptionDataElement) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1887</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] decompressData = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1888</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1889</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; KeyDerivationElement keyDerivationElement = OdfElement.findFirstChildNode(KeyDerivationElement.<span class="keyword">class</span>, encryptionDataElement);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1890</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; AlgorithmElement algorithmElement = OdfElement.findFirstChildNode(AlgorithmElement.<span class="keyword">class</span>, encryptionDataElement);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1891</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; String saltStr = keyDerivationElement.getSaltAttribute();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1892</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; String ivStr = algorithmElement.getInitialisationVectorAttribute();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1893</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; String checksum = encryptionDataElement.getChecksumAttribute();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1894</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] salt = Base64Binary.valueOf(saltStr).getBytes();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1895</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] iv = Base64Binary.valueOf(ivStr).getBytes();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1896</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] passBytes = oldPwd.getBytes(<span class="string">"UTF-8"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1897</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; MessageDigest md = MessageDigest.getInstance(<span class="string">"SHA-1"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1898</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; passBytes = md.digest(passBytes);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1899</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/*</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1900</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * char passChars[] = new char[passBytes.length]; for(int i = 0;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1901</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * i&lt;passBytes.length; i++){ passChars[i] =</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1902</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * (char)(passBytes[i]|0xFF); } KeySpec spec = new</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1903</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * PBEKeySpec(passChars, salt, 1024, 128); SecretKeyFactory factory</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1904</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); SecretKey</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1905</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * skey = factory.generateSecret(spec); byte[] raw =</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1906</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * skey.getEncoded(); SecretKeySpec skeySpec = new</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1907</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * SecretKeySpec(raw, "Blowfish");</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1908</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1909</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] dk = derivePBKDF2Key(passBytes, salt, 1024, 16);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1910</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; SecretKeySpec key = <span class="keyword">new</span> SecretKeySpec(dk, <span class="string">"Blowfish"</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1911</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1912</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; Cipher cipher = Cipher.getInstance(<span class="string">"Blowfish/CFB/NoPadding"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1913</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; IvParameterSpec ivParameterSpec = <span class="keyword">new</span> IvParameterSpec(iv);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1914</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; cipher.init(Cipher.DECRYPT_MODE, key, ivParameterSpec);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1915</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] decryptedData = cipher.doFinal(data);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1916</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1917</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// valid checksum</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1918</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; md.reset();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1919</td> <td class="nbHitsUncovered"><a title="Line 1919: Conditional coverage 50% (1/2).">&nbsp;1</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1919: Conditional coverage 50% (1/2)."> md.update(decryptedData, 0, (decryptedData.length &gt; 1024 ? 1024 : decryptedData.length));</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1920</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] checksumBytes = <span class="keyword">new</span> <span class="keyword">byte</span>[20];</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1921</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; md.digest(checksumBytes, 0, 20);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1922</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; String newChecksum = <span class="keyword">new</span> Base64Binary(checksumBytes).toString();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1923</td> <td class="nbHitsUncovered"><a title="Line 1923: Conditional coverage 50% (1/2).">&nbsp;1</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1923: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (newChecksum.equals(checksum)) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1924</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// decompress the bytes</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1925</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; Inflater decompresser = <span class="keyword">new</span> Inflater(<span class="keyword">true</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1926</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; decompresser.setInput(decryptedData);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1927</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; decompressData = <span class="keyword">new</span> <span class="keyword">byte</span>[manifestEntry.getSize()];</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1928</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; decompresser.inflate(decompressData);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1929</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; decompresser.end();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1930</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1931</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> OdfDecryptedException(<span class="string">"The given password is wrong, please check it."</span>);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1932</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1933</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception e) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1934</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="keyword">null</span>, e);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1935</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1936</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> decompressData;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1937</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1938</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1939</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// derive PBKDF2Key (reference http://www.ietf.org/rfc/rfc2898.txt)</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1940</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] derivePBKDF2Key(<span class="keyword">byte</span>[] password, <span class="keyword">byte</span>[] salt, <span class="keyword">int</span> iterationCount, <span class="keyword">int</span> keyLength) <span class="keyword">throws</span> NoSuchAlgorithmException, InvalidKeyException {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1941</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; SecretKeySpec keyspec = <span class="keyword">new</span> SecretKeySpec(password, <span class="string">"HmacSHA1"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1942</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; Mac hmac = Mac.getInstance(<span class="string">"HmacSHA1"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1943</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; hmac.init(keyspec);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1944</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// length in octets of HmacSHA1 function output, a positive integer</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1945</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> hmacLen = hmac.getMacLength();</pre></td></tr>
<tr> <td class="numLine">&nbsp;1946</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// let l be the number of hLen-octet blocks in the derived key, rounding</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1947</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// up,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1948</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// l = CEIL (dkLen / hLen) Here, CEIL (x) is the smallest integer</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1949</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// greater than, or equal to, x.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1950</td> <td class="nbHitsUncovered"><a title="Line 1950: Conditional coverage 50% (1/2).">&nbsp;5</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1950: Conditional coverage 50% (1/2)."> <span class="keyword">int</span> l = (keyLength % hmacLen &gt; 0) ? (keyLength / hmacLen + 1) : (keyLength / hmacLen);</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1951</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// let r be the number of octets in the last block: r = dkLen - (l - 1)</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1952</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// * hLen .</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1953</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> r = keyLength - (l - 1) * hmacLen;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1954</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span> T[] = <span class="keyword">new</span> <span class="keyword">byte</span>[l * hmacLen];</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1955</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> offset = 0;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1956</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// For each block of the derived key apply the function F defined below</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1957</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// to the password P, the salt S, the iteration count c, and</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1958</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// the block index to compute the block:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1959</td> <td class="nbHitsCovered"><a title="Line 1959: Conditional coverage 100% (2/2).">&nbsp;10</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1959: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 1; i &lt;= l; i++) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1960</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span> Ur[] = <span class="keyword">new</span> <span class="keyword">byte</span>[hmacLen];</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1961</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span> Ui[] = <span class="keyword">new</span> <span class="keyword">byte</span>[salt.length + 4];</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1962</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; System.arraycopy(salt, 0, Ui, 0, salt.length);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1963</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Here, INT (i) is a four-octet encoding of the integer i, most</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1964</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// significant octet first.</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1965</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; Ui[salt.length + 0] = (<span class="keyword">byte</span>) (i &gt;&gt;&gt; 24);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1966</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; Ui[salt.length + 1] = (<span class="keyword">byte</span>) (i &gt;&gt;&gt; 16);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1967</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; Ui[salt.length + 2] = (<span class="keyword">byte</span>) (i &gt;&gt;&gt; 8);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1968</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; Ui[salt.length + 3] = (<span class="keyword">byte</span>) (i);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1969</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// U_1 \xor U_2 \xor ... \xor U_c</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1970</td> <td class="nbHitsCovered"><a title="Line 1970: Conditional coverage 100% (2/2).">&nbsp;5125</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1970: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> j = 0; j &lt; iterationCount; j++) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1971</td> <td class="nbHitsCovered">&nbsp;5120</td> <td class="src"><pre class="src">&nbsp; Ui = hmac.doFinal(Ui);</pre></td></tr>
<tr> <td class="numLine">&nbsp;1972</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// XOR</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1973</td> <td class="nbHitsCovered"><a title="Line 1973: Conditional coverage 100% (2/2).">&nbsp;107520</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1973: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> k = 0; k &lt; T.length; k++) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1974</td> <td class="nbHitsCovered">&nbsp;102400</td> <td class="src"><pre class="src">&nbsp; Ur[k] ^= Ui[k];</pre></td></tr>
<tr> <td class="numLine">&nbsp;1975</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1976</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1977</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; System.arraycopy(Ur, 0, T, offset, hmacLen);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1978</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; offset += hmacLen;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1979</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1980</td> <td class="nbHitsUncovered"><a title="Line 1980: Conditional coverage 50% (1/2).">&nbsp;5</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1980: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (r &lt; hmacLen) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1981</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span> DK[] = <span class="keyword">new</span> <span class="keyword">byte</span>[keyLength];</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1982</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; System.arraycopy(T, 0, DK, 0, keyLength);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1983</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> DK;</pre></td></tr>
<tr> <td class="numLine">&nbsp;1984</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1985</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> T;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1986</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;1987</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;1988</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Serializes a DOM tree into a byte array.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1989</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Providing the counterpart of the generic Namespace handling of</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1990</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// OdfFileDom.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1991</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">byte</span>[] flushDom(Document dom) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;1992</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if it is one of our DOM files we may flush all collected namespaces</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;1993</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// to the root element</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1994</td> <td class="nbHitsUncovered"><a title="Line 1994: Conditional coverage 50% (1/2).">&nbsp;672</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1994: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (dom <span class="keyword">instanceof</span> OdfFileDom) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1995</td> <td class="nbHitsCovered">&nbsp;672</td> <td class="src"><pre class="src">&nbsp; OdfFileDom odfDom = (OdfFileDom) dom;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1996</td> <td class="nbHitsCovered">&nbsp;672</td> <td class="src"><pre class="src">&nbsp; Map&lt;String, String&gt; nsByUri = odfDom.getMapNamespacePrefixByUri();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1997</td> <td class="nbHitsCovered">&nbsp;672</td> <td class="src"><pre class="src">&nbsp; OdfElement root = odfDom.getRootElement();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1998</td> <td class="nbHitsUncovered"><a title="Line 1998: Conditional coverage 50% (1/2).">&nbsp;672</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 1998: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (root != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;1999</td> <td class="nbHitsCovered"><a title="Line 1999: Conditional coverage 100% (2/2).">&nbsp;672</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 1999: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Entry&lt;String, String&gt; entry : nsByUri.entrySet()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2000</td> <td class="nbHitsCovered">&nbsp;12877</td> <td class="src"><pre class="src">&nbsp; root.setAttributeNS(<span class="string">"http://www.w3.org/2000/xmlns/"</span>, <span class="string">"xmlns:"</span> + entry.getValue(), entry.getKey());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2001</td> <td class="nbHitsCovered">&nbsp;12877</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2002</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2003</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2004</td> <td class="nbHitsCovered">&nbsp;672</td> <td class="src"><pre class="src">&nbsp; ByteArrayOutputStream baos = <span class="keyword">new</span> ByteArrayOutputStream();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2005</td> <td class="nbHitsCovered">&nbsp;672</td> <td class="src"><pre class="src">&nbsp; DOMXSImplementationSourceImpl dis = <span class="keyword">new</span> org.apache.xerces.dom.DOMXSImplementationSourceImpl();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2006</td> <td class="nbHitsCovered">&nbsp;672</td> <td class="src"><pre class="src">&nbsp; DOMImplementationLS impl = (DOMImplementationLS) dis.getDOMImplementation(<span class="string">"LS"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2007</td> <td class="nbHitsCovered">&nbsp;672</td> <td class="src"><pre class="src">&nbsp; LSSerializer writer = impl.createLSSerializer();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2008</td> <td class="nbHitsCovered">&nbsp;672</td> <td class="src"><pre class="src">&nbsp; LSOutput output = impl.createLSOutput();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2009</td> <td class="nbHitsCovered">&nbsp;672</td> <td class="src"><pre class="src">&nbsp; output.setByteStream(baos);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2010</td> <td class="nbHitsCovered">&nbsp;672</td> <td class="src"><pre class="src">&nbsp; writer.write(dom, output);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2011</td> <td class="nbHitsCovered">&nbsp;672</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> baos.toByteArray();</pre></td></tr>
<tr> <td class="numLine">&nbsp;2012</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2013</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2014</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2015</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Get the latest version of package content as InputStream, as it would be</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2016</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * saved. This might not be the original version once loaded from the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2017</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2018</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2019</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2020</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * of the desired stream.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2021</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return Inputstream of the ODF file within the package for the given</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2022</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * path.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2023</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2024</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> InputStream getInputStream(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2025</td> <td class="nbHitsCovered">&nbsp;1666</td> <td class="src"><pre class="src">&nbsp; internalPath = normalizeFilePath(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;2026</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// else we always cache here and return a ByteArrayInputStream because</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2027</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2028</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// we would return ZipFile getInputStream(entry) we would not be</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2029</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// able to read 2 Entries at the same time. This is a limitation of the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2030</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// ZipFile class.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2031</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// As it would be quite a common thing to read the content.xml and the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2032</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// styles.xml</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2033</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// simultanously when using XSLT on OdfPackages we want to circumvent</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2034</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// this limitation</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2035</td> <td class="nbHitsCovered">&nbsp;1666</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] data = getBytes(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2036</td> <td class="nbHitsCovered"><a title="Line 2036: Conditional coverage 100% (4/4) [each condition: 100%, 100%].">&nbsp;1666</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2036: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (data != <span class="keyword">null</span> &amp;&amp; data.length != 0) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2037</td> <td class="nbHitsCovered">&nbsp;1605</td> <td class="src"><pre class="src">&nbsp; ByteArrayInputStream bais = <span class="keyword">new</span> ByteArrayInputStream(data);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2038</td> <td class="nbHitsCovered">&nbsp;1605</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> bais;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2039</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2040</td> <td class="nbHitsCovered">&nbsp;61</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2041</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2042</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2043</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2044</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Get the latest version of package content as InputStream, as it would be</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2045</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * saved. This might not be the original version once loaded from the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2046</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2047</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2048</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2049</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * of the desired stream.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2050</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param useOriginal</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2051</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * true uses the stream as loaded from the ZIP. False will return</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2052</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * even modified file content as a stream.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2053</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return Inputstream of the ODF file within the package for the given</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2054</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * path.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2055</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2056</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> InputStream getInputStream(String internalPath, <span class="keyword">boolean</span> useOriginal) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2057</td> <td class="nbHitsCovered">&nbsp;13</td> <td class="src"><pre class="src">&nbsp; InputStream stream = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2058</td> <td class="nbHitsUncovered"><a title="Line 2058: Conditional coverage 50% (1/2).">&nbsp;13</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2058: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (useOriginal) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2059</td> <td class="nbHitsCovered">&nbsp;13</td> <td class="src"><pre class="src">&nbsp; ZipEntry entry = mOriginalZipEntries.get(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2060</td> <td class="nbHitsCovered"><a title="Line 2060: Conditional coverage 100% (2/2).">&nbsp;13</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2060: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (entry != <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;2061</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2062</td> <td class="nbHitsCovered">&nbsp;12</td> <td class="src"><pre class="src">&nbsp; stream = mZipFile.getInputStream(entry);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2063</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (IOException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2064</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="keyword">null</span>, ex);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2065</td> <td class="nbHitsCovered">&nbsp;12</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2066</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2067</td> <td class="nbHitsCovered">&nbsp;13</td> <td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2068</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; stream = getInputStream(internalPath);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2069</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2070</td> <td class="nbHitsCovered">&nbsp;13</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> stream;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2071</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2072</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2073</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2074</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Gets the InputStream containing whole OdfPackage.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2075</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2076</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return the ODF package as input stream</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2077</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2078</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - if the package could not be read</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2079</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2080</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> InputStream getInputStream() <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2081</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> PipedOutputStream os = <span class="keyword">new</span> PipedOutputStream();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2082</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> PipedInputStream is = <span class="keyword">new</span> PipedInputStream();</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2083</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2084</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; is.connect(os);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2085</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2086</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Thread thread1 = <span class="keyword">new</span> Thread() {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2087</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2088</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; @Override</pre></td></tr>
<tr> <td class="numLine">&nbsp;2089</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
<tr> <td class="numLine">&nbsp;2090</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2091</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; save(os, mBaseURI);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2092</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception e) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2093</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2094</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2095</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; };</pre></td></tr>
<tr> <td class="numLine">&nbsp;2096</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2097</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Thread thread2 = <span class="keyword">new</span> Thread() {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2098</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2099</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; @Override</pre></td></tr>
<tr> <td class="numLine">&nbsp;2100</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
<tr> <td class="numLine">&nbsp;2101</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2102</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; BufferedInputStream bis = <span class="keyword">new</span> BufferedInputStream(is, StreamHelper.PAGE_SIZE);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2103</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; BufferedOutputStream bos = <span class="keyword">new</span> BufferedOutputStream(os, StreamHelper.PAGE_SIZE);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2104</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; StreamHelper.transformStream(bis, bos);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2105</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; is.close();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2106</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; os.close();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2107</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception ie) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2108</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2109</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2110</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; };</pre></td></tr>
<tr> <td class="numLine">&nbsp;2111</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2112</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; thread1.start();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2113</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; thread2.start();</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2114</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2115</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> is;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2116</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2117</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2118</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2119</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Insert the OutputStream for into OdfPackage. An existing file will be</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2120</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * replaced.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2121</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2122</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2123</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - relative documentURL where the DOM tree should be inserted</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2124</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * as XML file</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2125</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return outputstream for the data of the file to be stored in package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2126</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2127</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * when the DOM tree could not be inserted</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2128</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2129</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> OutputStream insertOutputStream(String internalPath) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2130</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> insertOutputStream(internalPath, <span class="keyword">null</span>);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2131</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2132</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2133</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2134</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Insert the OutputStream - to be filled after method - when stream is</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2135</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * closed into OdfPackage. An existing file will be replaced.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2136</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2137</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2138</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - relative documentURL where the DOM tree should be inserted</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2139</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * as XML file</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2140</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param mediaType</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2141</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * - media type of stream</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2142</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return outputstream for the data of the file to be stored in package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2143</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws java.lang.Exception</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2144</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * when the DOM tree could not be inserted</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2145</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2146</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> OutputStream insertOutputStream(String internalPath, String mediaType) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2147</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; internalPath = normalizeFilePath(internalPath);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2148</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> String fPath = internalPath;</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2149</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> OdfFileEntry fFileEntry = getFileEntry(internalPath);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2150</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> String fMediaType = mediaType;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2151</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2152</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; ByteArrayOutputStream baos = <span class="keyword">new</span> ByteArrayOutputStream() {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2153</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2154</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; @Override</pre></td></tr>
<tr> <td class="numLine">&nbsp;2155</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> close() {</pre></td></tr>
<tr> <td class="numLine">&nbsp;2156</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2157</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">byte</span>[] data = <span class="keyword">this</span>.toByteArray();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2158</td> <td class="nbHitsUncovered"><a title="Line 2158: Conditional coverage 0% (0/4) [each condition: 0%, 0%].">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2158: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">if</span> (fMediaType == <span class="keyword">null</span> || fMediaType.length() == 0) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2159</td> <td class="nbHitsUncovered"><a title="Line 2159: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2159: Conditional coverage 0% (0/2)."> insert(data, fPath, fFileEntry == <span class="keyword">null</span> ? <span class="keyword">null</span> : fFileEntry.getMediaTypeString());</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2160</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2161</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; insert(data, fPath, fMediaType);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2162</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2163</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">super</span>.close();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2164</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2165</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).log(Level.SEVERE, <span class="keyword">null</span>, ex);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2166</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2167</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2168</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; };</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2169</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> baos;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2170</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2171</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2172</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2173</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Removes a single file from the package.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2174</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2175</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2176</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * of the file relative to the package root</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2177</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2178</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> remove(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2179</td> <td class="nbHitsCovered">&nbsp;115</td> <td class="src"><pre class="src">&nbsp; internalPath = normalizePath(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2180</td> <td class="nbHitsUncovered"><a title="Line 2180: Conditional coverage 75% (3/4) [each condition: 50%, 100%].">&nbsp;115</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2180: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> <span class="keyword">if</span> (mZipEntries != <span class="keyword">null</span> &amp;&amp; mZipEntries.containsKey(internalPath)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2181</td> <td class="nbHitsCovered">&nbsp;68</td> <td class="src"><pre class="src">&nbsp; mZipEntries.remove(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;2182</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2183</td> <td class="nbHitsUncovered"><a title="Line 2183: Conditional coverage 75% (3/4) [each condition: 50%, 100%].">&nbsp;115</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2183: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> <span class="keyword">if</span> (mManifestEntries != <span class="keyword">null</span> &amp;&amp; mManifestEntries.containsKey(internalPath)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2184</td> <td class="nbHitsCovered">&nbsp;99</td> <td class="src"><pre class="src">&nbsp; OdfFileEntry manifestEntry = mManifestEntries.remove(internalPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2185</td> <td class="nbHitsCovered">&nbsp;99</td> <td class="src"><pre class="src">&nbsp; FileEntryElement manifestEle = manifestEntry.getOdfElement();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2186</td> <td class="nbHitsCovered">&nbsp;99</td> <td class="src"><pre class="src">&nbsp; manifestEle.getParentNode().removeChild(manifestEle);</pre></td></tr>
<tr> <td class="numLine">&nbsp;2187</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2188</td> <td class="nbHitsCovered">&nbsp;115</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2189</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2190</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2191</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Encoded XML Attributes</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2192</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2193</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> String encodeXMLAttributes(String attributeValue) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2194</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; String encodedValue = QUOTATION_PATTERN.matcher(attributeValue).replaceAll(ENCODED_QUOTATION);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2195</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; encodedValue = APOSTROPHE_PATTERN.matcher(encodedValue).replaceAll(ENCODED_APOSTROPHE);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2196</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> encodedValue;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2197</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2198</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2199</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2200</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Get EntityResolver to be used in XML Parsers which can resolve content</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2201</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * inside the OdfPackage</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2202</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2203</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return a SAX EntityResolver</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2204</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2205</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> EntityResolver getEntityResolver() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2206</td> <td class="nbHitsCovered"><a title="Line 2206: Conditional coverage 100% (2/2).">&nbsp;10</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2206: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mResolver == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2207</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; mResolver = <span class="keyword">new</span> Resolver(<span class="keyword">this</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;2208</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2209</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> mResolver;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2210</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2211</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2212</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2213</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Get URIResolver to be used in XSL Transformations which can resolve</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2214</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * content inside the OdfPackage</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2215</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2216</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return a TraX Resolver</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2217</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2218</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> URIResolver getURIResolver() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2219</td> <td class="nbHitsUncovered"><a title="Line 2219: Conditional coverage 50% (1/2).">&nbsp;26</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2219: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (mResolver == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2220</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mResolver = <span class="keyword">new</span> Resolver(<span class="keyword">this</span>);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2221</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2222</td> <td class="nbHitsCovered">&nbsp;26</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> mResolver;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2223</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2224</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2225</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> String getBaseURLFromFile(File file) <span class="keyword">throws</span> Exception {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2226</td> <td class="nbHitsCovered">&nbsp;960</td> <td class="src"><pre class="src">&nbsp; String baseURL = Util.toExternalForm(file.getCanonicalFile().toURI());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2227</td> <td class="nbHitsCovered">&nbsp;960</td> <td class="src"><pre class="src">&nbsp; baseURL = BACK_SLASH_PATTERN.matcher(baseURL).replaceAll(SLASH);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2228</td> <td class="nbHitsCovered">&nbsp;960</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> baseURL;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2229</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2230</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2231</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2232</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Ensures that the given file path is not null nor empty and not an</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2233</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * external reference</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2234</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;ol&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2235</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;li&gt;All backslashes "\" are exchanged by slashes "/"&lt;/li&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2236</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;li&gt;Any substring "/../", "/./" or "//" will be removed&lt;/li&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2237</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;li&gt;A prefix "./" and "../" will be removed&lt;/li&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2238</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;/ol&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2239</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2240</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws IllegalArgumentException</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2241</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * If the path is NULL, empty or an external path (e.g. starting</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2242</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * with "../" is given). None relative URLs will NOT throw an</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2243</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * exception.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2244</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return the normalized path or the URL</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2245</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2246</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">static</span> String normalizeFilePath(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2247</td> <td class="nbHitsUncovered"><a title="Line 2247: Conditional coverage 50% (1/2).">&nbsp;11298</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2247: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (internalPath.equals(EMPTY_STRING)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2248</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; String errMsg = <span class="string">"The internalPath given by parameter is an empty string!"</span>;</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2249</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).severe(errMsg);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2250</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(errMsg);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2251</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2252</td> <td class="nbHitsCovered">&nbsp;11298</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> normalizePath(internalPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;2253</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2254</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2255</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2256</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2257</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Ensures the given directory path is not null nor an external reference to</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2258</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * resources outside the package. An empty path and slash "/" are both</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2259</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * mapped to the root directory/document. NOTE: Although ODF only refer the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2260</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * "/" as root, the empty path aligns more adequate with the file system</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2261</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * concept. To ensure the given directory path within the package can be</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2262</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * used as a key (is unique for the Package) the path will be normalized.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2263</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2264</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @see #normalizeFilePath(String) In addition to the file path</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2265</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * normalization a trailing slash will be used for directories.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2266</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2267</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">static</span> String normalizeDirectoryPath(String directoryPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2268</td> <td class="nbHitsCovered">&nbsp;1296</td> <td class="src"><pre class="src">&nbsp; directoryPath = normalizePath(directoryPath);</pre></td></tr>
<tr> <td class="numLine">&nbsp;2269</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if not the root document - which is from ODF view a '/' and no</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2270</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// trailing '/'</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2271</td> <td class="nbHitsUncovered"><a title="Line 2271: Conditional coverage 75% (3/4) [each condition: 50%, 100%].">&nbsp;1296</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2271: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> <span class="keyword">if</span> (!directoryPath.equals(OdfPackageDocument.ROOT_DOCUMENT_PATH) &amp;&amp; !directoryPath.endsWith(SLASH)) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2272</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// add a trailing slash</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2273</td> <td class="nbHitsCovered">&nbsp;86</td> <td class="src"><pre class="src">&nbsp; directoryPath = directoryPath + SLASH;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2274</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2275</td> <td class="nbHitsCovered">&nbsp;1296</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> directoryPath;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2276</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2277</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2278</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/** Normalizes both directory and file path */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2279</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">static</span> String normalizePath(String path) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2280</td> <td class="nbHitsUncovered"><a title="Line 2280: Conditional coverage 50% (1/2).">&nbsp;25244</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2280: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (path == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2281</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; String errMsg = <span class="string">"The internalPath given by parameter is NULL!"</span>;</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2282</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; Logger.getLogger(OdfPackage.<span class="keyword">class</span>.getName()).severe(errMsg);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2283</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(errMsg);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2284</td> <td class="nbHitsCovered"><a title="Line 2284: Conditional coverage 100% (2/2).">&nbsp;25244</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2284: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (!mightBeExternalReference(path)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2285</td> <td class="nbHitsCovered"><a title="Line 2285: Conditional coverage 100% (2/2).">&nbsp;25234</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2285: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (path.equals(EMPTY_STRING)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2286</td> <td class="nbHitsCovered">&nbsp;569</td> <td class="src"><pre class="src">&nbsp; path = SLASH;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2287</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;2288</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// exchange all backslash "\" with a slash "/"</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2289</td> <td class="nbHitsUncovered"><a title="Line 2289: Conditional coverage 50% (1/2).">&nbsp;24665</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2289: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (path.indexOf(<span class="string">'\\'</span>) != -1) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2290</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; path = BACK_SLASH_PATTERN.matcher(path).replaceAll(SLASH);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2291</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2292</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// exchange all double slash "//" with a slash "/"</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2293</td> <td class="nbHitsCovered"><a title="Line 2293: Conditional coverage 100% (2/2).">&nbsp;24715</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2293: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (path.indexOf(<span class="string">"//"</span>) != -1) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2294</td> <td class="nbHitsCovered">&nbsp;50</td> <td class="src"><pre class="src">&nbsp; path = DOUBLE_SLASH_PATTERN.matcher(path).replaceAll(SLASH);</pre></td></tr>
<tr> <td class="numLine">&nbsp;2295</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2296</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if directory replacements (e.g. ..) exist, resolve and remove</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2297</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// them</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2298</td> <td class="nbHitsCovered"><a title="Line 2298: Conditional coverage 100% (4/4) [each condition: 100%, 100%].">&nbsp;24665</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2298: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (path.indexOf(<span class="string">"/."</span>) != -1 || path.indexOf(<span class="string">"./"</span>) != -1) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2299</td> <td class="nbHitsCovered">&nbsp;8</td> <td class="src"><pre class="src">&nbsp; path = removeChangeDirectories(path);</pre></td></tr>
<tr> <td class="numLine">&nbsp;2300</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2301</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2302</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2303</td> <td class="nbHitsCovered">&nbsp;25244</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> path;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2304</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2305</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2306</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/** Normalizes both directory and file path */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2307</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">boolean</span> mightBeExternalReference(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2308</td> <td class="nbHitsCovered">&nbsp;25244</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">boolean</span> isExternalReference = <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2309</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if the fileReference is a external relative documentURL..</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2310</td> <td class="nbHitsUncovered"><a title="Line 2310: Conditional coverage 75% (6/8) [each condition: 50%, 100%, 50%, 100%].">&nbsp;25244</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2310: Conditional coverage 75% (6/8) [each condition: 50%, 100%, 50%, 100%]."> <span class="keyword">if</span> (internalPath.startsWith(DOUBLE_DOT) || <span class="comment">// or absolute documentURL</span></a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2311</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// AND not root document</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2312</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; internalPath.startsWith(SLASH) &amp;&amp; !internalPath.equals(SLASH) || <span class="comment">// or</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2313</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// absolute</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2314</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// IRI</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2315</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; internalPath.contains(COLON)) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2316</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; isExternalReference = <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2317</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2318</td> <td class="nbHitsCovered">&nbsp;25244</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> isExternalReference;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2319</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2320</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2321</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2322</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Resolving the directory replacements (ie. "/../" and "/./") with a slash</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2323</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * "/"</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2324</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2325</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> String removeChangeDirectories(String path) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2326</td> <td class="nbHitsCovered">&nbsp;8</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">boolean</span> isDirectory = path.endsWith(SLASH);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2327</td> <td class="nbHitsCovered">&nbsp;8</td> <td class="src"><pre class="src">&nbsp; StringTokenizer tokenizer = <span class="keyword">new</span> StringTokenizer(path, SLASH);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2328</td> <td class="nbHitsCovered">&nbsp;8</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> tokenCount = tokenizer.countTokens();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2329</td> <td class="nbHitsCovered">&nbsp;8</td> <td class="src"><pre class="src">&nbsp; List&lt;String&gt; tokenList = <span class="keyword">new</span> ArrayList&lt;String&gt;(tokenCount);</pre></td></tr>
<tr> <td class="numLine">&nbsp;2330</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// add all paths to a list</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2331</td> <td class="nbHitsCovered"><a title="Line 2331: Conditional coverage 100% (2/2).">&nbsp;40</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2331: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (tokenizer.hasMoreTokens()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2332</td> <td class="nbHitsCovered">&nbsp;32</td> <td class="src"><pre class="src">&nbsp; String token = tokenizer.nextToken();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2333</td> <td class="nbHitsCovered">&nbsp;32</td> <td class="src"><pre class="src">&nbsp; tokenList.add(token);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2334</td> <td class="nbHitsCovered">&nbsp;32</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2335</td> <td class="nbHitsCovered"><a title="Line 2335: Conditional coverage 100% (2/2).">&nbsp;8</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2335: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!isDirectory) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2336</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; String lastPath = tokenList.get(tokenCount - 1);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2337</td> <td class="nbHitsCovered"><a title="Line 2337: Conditional coverage 100% (4/4) [each condition: 100%, 100%].">&nbsp;5</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2337: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (lastPath.equals(DOT) || lastPath.equals(DOUBLE_DOT)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2338</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; isDirectory = <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2339</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2340</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2341</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; String currentToken;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2342</td> <td class="nbHitsCovered">&nbsp;8</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> removeDirLevel = 0;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2343</td> <td class="nbHitsCovered">&nbsp;8</td> <td class="src"><pre class="src">&nbsp; StringBuilder out = <span class="keyword">new</span> StringBuilder();</pre></td></tr>
<tr> <td class="numLine">&nbsp;2344</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// work on the list from back to front</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2345</td> <td class="nbHitsCovered"><a title="Line 2345: Conditional coverage 100% (2/2).">&nbsp;40</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2345: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = tokenCount - 1; i &gt;= 0; i--) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2346</td> <td class="nbHitsCovered">&nbsp;32</td> <td class="src"><pre class="src">&nbsp; currentToken = tokenList.get(i);</pre></td></tr>
<tr> <td class="numLine">&nbsp;2347</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// every ".." will remove an upcoming path</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2348</td> <td class="nbHitsCovered"><a title="Line 2348: Conditional coverage 100% (2/2).">&nbsp;32</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2348: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (currentToken.equals(DOUBLE_DOT)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2349</td> <td class="nbHitsCovered">&nbsp;9</td> <td class="src"><pre class="src">&nbsp; removeDirLevel++;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2350</td> <td class="nbHitsCovered"><a title="Line 2350: Conditional coverage 100% (2/2).">&nbsp;23</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2350: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (currentToken.equals(DOT)) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;2351</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;2352</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// if a path have to be remove, neglect current path</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2353</td> <td class="nbHitsCovered"><a title="Line 2353: Conditional coverage 100% (2/2).">&nbsp;19</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2353: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (removeDirLevel &gt; 0) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2354</td> <td class="nbHitsCovered">&nbsp;9</td> <td class="src"><pre class="src">&nbsp; removeDirLevel--;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2355</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;2356</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// add the path segment</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2357</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; out.insert(0, SLASH);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2358</td> <td class="nbHitsCovered">&nbsp;10</td> <td class="src"><pre class="src">&nbsp; out.insert(0, currentToken);</pre></td></tr>
<tr> <td class="numLine">&nbsp;2359</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2360</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2361</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2362</td> <td class="nbHitsUncovered"><a title="Line 2362: Conditional coverage 50% (1/2).">&nbsp;8</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2362: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (removeDirLevel &gt; 0) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2363</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> EMPTY_STRING;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2364</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2365</td> <td class="nbHitsCovered"><a title="Line 2365: Conditional coverage 100% (2/2).">&nbsp;8</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2365: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!isDirectory) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;2366</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// remove trailing slash /</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2367</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; out.deleteCharAt(out.length() - 1);</pre></td></tr>
<tr> <td class="numLine">&nbsp;2368</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2369</td> <td class="nbHitsCovered">&nbsp;8</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> out.toString();</pre></td></tr>
<tr> <td class="numLine">&nbsp;2370</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2371</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2372</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2373</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2374</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Checks if the given reference is a reference, which points outside the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2375</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * ODF package</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2376</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2377</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param internalPath</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2378</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * the file reference to be checked</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2379</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return true if the reference is an package external reference</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2380</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2381</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">boolean</span> isExternalReference(String internalPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2382</td> <td class="nbHitsUncovered"><a title="Line 2382: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2382: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (mightBeExternalReference(internalPath)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2383</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">true</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2384</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2385</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> mightBeExternalReference(normalizePath(internalPath));</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2386</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2387</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2388</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2389</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2390</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Allow an application to register an error event handler.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2391</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2392</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * If the application does not register an error handler, all error events</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2393</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * reported by the ODFDOM (e.g. the SAX Parser) will be silently ignored;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2394</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * however, normal processing may not continue. It is highly recommended</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2395</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * that all ODF applications implement an error handler to avoid unexpected</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2396</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * bugs.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2397</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;/p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2398</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2399</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Applications may register a new or different handler in the middle of a</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2400</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * parse, and the ODFDOM will begin using the new handler immediately.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2401</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;/p&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2402</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2403</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param handler</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2404</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * The error handler.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2405</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @see #getErrorHandler</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2406</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2407</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> setErrorHandler(ErrorHandler handler) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2408</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mErrorHandler = handler;</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2409</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2410</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2411</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2412</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Return the current error handler used for ODF validation.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2413</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2414</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return The current error handler, or null if none has been registered</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2415</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * and validation is disabled.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2416</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @see #setErrorHandler</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2417</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2418</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> ErrorHandler getErrorHandler() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2419</td> <td class="nbHitsCovered">&nbsp;7116</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> mErrorHandler;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2420</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2421</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2422</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">void</span> logValidationWarning(ValidationConstraint constraint, String baseURI, Object... o) <span class="keyword">throws</span> SAXException {</pre></td></tr>
<tr> <td class="numLine">&nbsp;2423</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// try{</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2424</td> <td class="nbHitsUncovered"><a title="Line 2424: Conditional coverage 50% (1/2).">&nbsp;63</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2424: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (mErrorHandler == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2425</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2426</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2427</td> <td class="nbHitsCovered">&nbsp;63</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> varCount = 0;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2428</td> <td class="nbHitsUncovered"><a title="Line 2428: Conditional coverage 50% (1/2).">&nbsp;63</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2428: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (o != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2429</td> <td class="nbHitsCovered">&nbsp;63</td> <td class="src"><pre class="src">&nbsp; varCount = o.length;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2430</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2431</td> <td class="nbHitsUncovered"><a title="Line 2431: Conditional coverage 75% (3/4).">&nbsp;63</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2431: Conditional coverage 75% (3/4)."> <span class="keyword">switch</span> (varCount) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2432</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">case</span> 0:</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2433</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; mErrorHandler.warning(<span class="keyword">new</span> OdfValidationException(constraint, baseURI, o));</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2434</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">break</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2435</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">case</span> 1:</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2436</td> <td class="nbHitsCovered">&nbsp;61</td> <td class="src"><pre class="src">&nbsp; mErrorHandler.warning(<span class="keyword">new</span> OdfValidationException(constraint, baseURI, o[0]));</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2437</td> <td class="nbHitsCovered">&nbsp;61</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">break</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2438</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">case</span> 2:</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2439</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; mErrorHandler.warning(<span class="keyword">new</span> OdfValidationException(constraint, baseURI, o[0], o[1]));</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2440</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">break</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2441</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2442</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// } catch (SAXException ex){</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2443</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Logger.getLogger(OdfPackage.class.getName()).log(Level.WARNING, null,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2444</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// ex);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2445</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// }</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2446</td> <td class="nbHitsCovered">&nbsp;63</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2447</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2448</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">void</span> logValidationError(ValidationConstraint constraint, String baseURI, Object... o) <span class="keyword">throws</span> SAXException {</pre></td></tr>
<tr> <td class="numLine">&nbsp;2449</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// try{</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2450</td> <td class="nbHitsCovered"><a title="Line 2450: Conditional coverage 100% (2/2).">&nbsp;25</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2450: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mErrorHandler == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2451</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2452</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2453</td> <td class="nbHitsCovered">&nbsp;24</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> varCount = 0;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2454</td> <td class="nbHitsUncovered"><a title="Line 2454: Conditional coverage 50% (1/2).">&nbsp;24</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 2454: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (o != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2455</td> <td class="nbHitsCovered">&nbsp;24</td> <td class="src"><pre class="src">&nbsp; varCount = o.length;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2456</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2457</td> <td class="nbHitsCovered"><a title="Line 2457: Conditional coverage 100% (4/4).">&nbsp;24</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 2457: Conditional coverage 100% (4/4)."> <span class="keyword">switch</span> (varCount) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;2458</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">case</span> 0:</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2459</td> <td class="nbHitsCovered">&nbsp;9</td> <td class="src"><pre class="src">&nbsp; mErrorHandler.error(<span class="keyword">new</span> OdfValidationException(constraint, baseURI, o));</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2460</td> <td class="nbHitsCovered">&nbsp;8</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">break</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2461</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">case</span> 1:</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2462</td> <td class="nbHitsCovered">&nbsp;12</td> <td class="src"><pre class="src">&nbsp; mErrorHandler.error(<span class="keyword">new</span> OdfValidationException(constraint, baseURI, o[0]));</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2463</td> <td class="nbHitsCovered">&nbsp;12</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">break</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2464</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">case</span> 2:</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2465</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; mErrorHandler.error(<span class="keyword">new</span> OdfValidationException(constraint, baseURI, o[0], o[1]));</pre></td></tr>
<tr> <td class="numLine">&nbsp;2466</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">break</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;2467</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2468</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// } catch (SAXException ex) {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2469</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Logger.getLogger(OdfPackage.class.getName()).log(Level.SEVERE, null,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2470</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// ex);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2471</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// }</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2472</td> <td class="nbHitsCovered">&nbsp;23</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2473</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2474</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2475</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param odfVersion</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2476</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * parsed from the manifest</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2477</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2478</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">void</span> setManifestVersion(String odfVersion) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2479</td> <td class="nbHitsCovered">&nbsp;554</td> <td class="src"><pre class="src">&nbsp; mManifestVersion = odfVersion;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2480</td> <td class="nbHitsCovered">&nbsp;554</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2481</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;2482</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2483</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return the ODF version found in the manifest. Meant to be used to reuse</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2484</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * when the manifest is recreated</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2485</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2486</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; String getManifestVersion() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;2487</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> mManifestVersion;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2488</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;2489</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;}</pre></td></tr>
</table>
<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1 on 22.02.13 10:27.</div>
</body>
</html>