Clover coverage report - dom4j - 1.6.1
Coverage timestamp: ma mei 16 2005 14:23:01 GMT+01:00
file stats: LOC: 296   Methods: 26
NCLOC: 174   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
AbstractDocument.java 31,8% 66,2% 76,9% 62,4%
coverage coverage
 1    /*
 2    * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
 3    *
 4    * This software is open source.
 5    * See the bottom of this file for the licence.
 6    */
 7   
 8    package org.dom4j.tree;
 9   
 10    import java.io.IOException;
 11    import java.io.StringWriter;
 12    import java.io.Writer;
 13    import java.util.Iterator;
 14    import java.util.List;
 15    import java.util.Map;
 16   
 17    import org.dom4j.Comment;
 18    import org.dom4j.Document;
 19    import org.dom4j.DocumentType;
 20    import org.dom4j.Element;
 21    import org.dom4j.IllegalAddException;
 22    import org.dom4j.Node;
 23    import org.dom4j.ProcessingInstruction;
 24    import org.dom4j.QName;
 25    import org.dom4j.Text;
 26    import org.dom4j.Visitor;
 27    import org.dom4j.io.OutputFormat;
 28    import org.dom4j.io.XMLWriter;
 29   
 30    /**
 31    * <p>
 32    * <code>AbstractDocument</code> is an abstract base class for tree
 33    * implementors to use for implementation inheritence.
 34    * </p>
 35    *
 36    * @author <a href="mailto:jstrachan@apache.org">James Strachan </a>
 37    * @version $Revision: 1.33 $
 38    */
 39    public abstract class AbstractDocument extends AbstractBranch implements
 40    Document {
 41   
 42    /** The encoding of this document as stated in the XML declaration */
 43    protected String encoding;
 44   
 45  6283 public AbstractDocument() {
 46    }
 47   
 48  25 public short getNodeType() {
 49  25 return DOCUMENT_NODE;
 50    }
 51   
 52  1 public String getPath(Element context) {
 53  1 return "/";
 54    }
 55   
 56  1 public String getUniquePath(Element context) {
 57  1 return "/";
 58    }
 59   
 60  6459 public Document getDocument() {
 61  6459 return this;
 62    }
 63   
 64  0 public String getXMLEncoding() {
 65  0 return null;
 66    }
 67   
 68  0 public String getStringValue() {
 69  0 Element root = getRootElement();
 70   
 71  0 return (root != null) ? root.getStringValue() : "";
 72    }
 73   
 74  58 public String asXML() {
 75  58 OutputFormat format = new OutputFormat();
 76  58 format.setEncoding(encoding);
 77   
 78  58 try {
 79  58 StringWriter out = new StringWriter();
 80  58 XMLWriter writer = new XMLWriter(out, format);
 81  58 writer.write(this);
 82  58 writer.flush();
 83   
 84  58 return out.toString();
 85    } catch (IOException e) {
 86  0 throw new RuntimeException("IOException while generating textual "
 87    + "representation: " + e.getMessage());
 88    }
 89    }
 90   
 91  0 public void write(Writer out) throws IOException {
 92  0 OutputFormat format = new OutputFormat();
 93  0 format.setEncoding(encoding);
 94   
 95  0 XMLWriter writer = new XMLWriter(out, format);
 96  0 writer.write(this);
 97    }
 98   
 99    /**
 100    * <p>
 101    * <code>accept</code> method is the <code>Visitor Pattern</code>
 102    * method.
 103    * </p>
 104    *
 105    * @param visitor
 106    * <code>Visitor</code> is the visitor.
 107    */
 108  0 public void accept(Visitor visitor) {
 109  0 visitor.visit(this);
 110   
 111  0 DocumentType docType = getDocType();
 112   
 113  0 if (docType != null) {
 114  0 visitor.visit(docType);
 115    }
 116   
 117    // visit content
 118  0 List content = content();
 119   
 120  0 if (content != null) {
 121  0 for (Iterator iter = content.iterator(); iter.hasNext();) {
 122  0 Object object = iter.next();
 123   
 124  0 if (object instanceof String) {
 125  0 Text text = getDocumentFactory()
 126    .createText((String) object);
 127  0 visitor.visit(text);
 128    } else {
 129  0 Node node = (Node) object;
 130  0 node.accept(visitor);
 131    }
 132    }
 133    }
 134    }
 135   
 136  159 public String toString() {
 137  159 return super.toString() + " [Document: name " + getName() + "]";
 138    }
 139   
 140  110 public void normalize() {
 141  110 Element element = getRootElement();
 142   
 143  110 if (element != null) {
 144  110 element.normalize();
 145    }
 146    }
 147   
 148  24 public Document addComment(String comment) {
 149  24 Comment node = getDocumentFactory().createComment(comment);
 150  24 add(node);
 151   
 152  24 return this;
 153    }
 154   
 155  25 public Document addProcessingInstruction(String target, String data) {
 156  25 ProcessingInstruction node = getDocumentFactory()
 157    .createProcessingInstruction(target, data);
 158  25 add(node);
 159   
 160  25 return this;
 161    }
 162   
 163  0 public Document addProcessingInstruction(String target, Map data) {
 164  0 ProcessingInstruction node = getDocumentFactory()
 165    .createProcessingInstruction(target, data);
 166  0 add(node);
 167   
 168  0 return this;
 169    }
 170   
 171  434 public Element addElement(String name) {
 172  434 Element element = getDocumentFactory().createElement(name);
 173  434 add(element);
 174   
 175  434 return element;
 176    }
 177   
 178  2 public Element addElement(String qualifiedName, String namespaceURI) {
 179  2 Element element = getDocumentFactory().createElement(qualifiedName,
 180    namespaceURI);
 181  2 add(element);
 182   
 183  2 return element;
 184    }
 185   
 186  5835 public Element addElement(QName qName) {
 187  5835 Element element = getDocumentFactory().createElement(qName);
 188  5835 add(element);
 189   
 190  5835 return element;
 191    }
 192   
 193  4 public void setRootElement(Element rootElement) {
 194  4 clearContent();
 195   
 196  4 if (rootElement != null) {
 197  4 super.add(rootElement);
 198  4 rootElementAdded(rootElement);
 199    }
 200    }
 201   
 202  6288 public void add(Element element) {
 203  6288 checkAddElementAllowed(element);
 204  6287 super.add(element);
 205  6287 rootElementAdded(element);
 206    }
 207   
 208  2 public boolean remove(Element element) {
 209  2 boolean answer = super.remove(element);
 210  2 Element root = getRootElement();
 211   
 212  2 if ((root != null) && answer) {
 213  0 setRootElement(null);
 214    }
 215   
 216  2 element.setDocument(null);
 217   
 218  2 return answer;
 219    }
 220   
 221  0 public Node asXPathResult(Element parent) {
 222  0 return this;
 223    }
 224   
 225  6341 protected void childAdded(Node node) {
 226  6341 if (node != null) {
 227  6341 node.setDocument(this);
 228    }
 229    }
 230   
 231  4 protected void childRemoved(Node node) {
 232  4 if (node != null) {
 233  4 node.setDocument(null);
 234    }
 235    }
 236   
 237  6288 protected void checkAddElementAllowed(Element element) {
 238  6288 Element root = getRootElement();
 239   
 240  6288 if (root != null) {
 241  1 throw new IllegalAddException(this, element,
 242    "Cannot add another element to this "
 243    + "Document as it already has a root "
 244    + "element of: " + root.getQualifiedName());
 245    }
 246    }
 247   
 248    /**
 249    * Called to set the root element variable
 250    *
 251    * @param rootElement
 252    * DOCUMENT ME!
 253    */
 254    protected abstract void rootElementAdded(Element rootElement);
 255   
 256  11346 public void setXMLEncoding(String enc) {
 257  11346 this.encoding = enc;
 258    }
 259    }
 260   
 261    /*
 262    * Redistribution and use of this software and associated documentation
 263    * ("Software"), with or without modification, are permitted provided that the
 264    * following conditions are met:
 265    *
 266    * 1. Redistributions of source code must retain copyright statements and
 267    * notices. Redistributions must also contain a copy of this document.
 268    *
 269    * 2. Redistributions in binary form must reproduce the above copyright notice,
 270    * this list of conditions and the following disclaimer in the documentation
 271    * and/or other materials provided with the distribution.
 272    *
 273    * 3. The name "DOM4J" must not be used to endorse or promote products derived
 274    * from this Software without prior written permission of MetaStuff, Ltd. For
 275    * written permission, please contact dom4j-info@metastuff.com.
 276    *
 277    * 4. Products derived from this Software may not be called "DOM4J" nor may
 278    * "DOM4J" appear in their names without prior written permission of MetaStuff,
 279    * Ltd. DOM4J is a registered trademark of MetaStuff, Ltd.
 280    *
 281    * 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org
 282    *
 283    * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND
 284    * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 285    * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 286    * ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE
 287    * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 288    * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 289    * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 290    * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 291    * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 292    * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 293    * POSSIBILITY OF SUCH DAMAGE.
 294    *
 295    * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
 296    */