Clover coverage report -
Coverage timestamp: Sun Nov 1 2009 23:08:24 UTC
file stats: LOC: 197   Methods: 11
NCLOC: 71   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
DocumentTypeImpl.java 0% 0% 0% 0%
coverage
 1    /*
 2    * Licensed to the Apache Software Foundation (ASF) under one or more
 3    * contributor license agreements. See the NOTICE file distributed with
 4    * this work for additional information regarding copyright ownership.
 5    * The ASF licenses this file to You under the Apache License, Version 2.0
 6    * (the "License"); you may not use this file except in compliance with
 7    * the License. You may obtain a copy of the License at
 8    *
 9    * http://www.apache.org/licenses/LICENSE-2.0
 10    *
 11    * Unless required by applicable law or agreed to in writing, software
 12    * distributed under the License is distributed on an "AS IS" BASIS,
 13    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 14    * See the License for the specific language governing permissions and
 15    * limitations under the License.
 16    *
 17    * $Id: DocumentTypeImpl.java 541508 2007-05-25 01:54:12Z vgritsenko $
 18    */
 19   
 20    package org.apache.xindice.xml.dom;
 21   
 22    import org.apache.xindice.util.StringUtilities;
 23   
 24    import org.w3c.dom.DocumentType;
 25    import org.w3c.dom.NamedNodeMap;
 26    import org.w3c.dom.Node;
 27   
 28    /**
 29    * DocumentTypeImpl
 30    *
 31    * @version $Revision: 541508 $, $Date: 2007-05-24 18:54:12 -0700 (Thu, 24 May 2007) $
 32    */
 33    public final class DocumentTypeImpl extends NodeImpl
 34    implements DocumentType {
 35   
 36  0 public DocumentTypeImpl() {
 37  0 super(null, true);
 38    }
 39   
 40  0 public short getNodeType() {
 41  0 return Node.DOCUMENT_TYPE_NODE;
 42    }
 43   
 44    /**
 45    * The name of DTD; i.e., the name immediately following the
 46    * <code>DOCTYPE</code> keyword.
 47    */
 48  0 public String getName() {
 49  0 return nodeName;
 50    }
 51   
 52    /**
 53    * A <code>NamedNodeMap</code> containing the general entities, both
 54    * external and internal, declared in the DTD. Duplicates are discarded.
 55    * For example in:&lt;!DOCTYPE ex SYSTEM "ex.dtd" [ &lt;!ENTITY foo
 56    * "foo"&gt; &lt;!ENTITY bar "bar"&gt; &lt;!ENTITY % baz "baz"&gt;]&gt;
 57    * &lt;ex/&gt; the interface provides access to <code>foo</code> and
 58    * <code>bar</code> but not <code>baz</code>. Every node in this map also
 59    * implements the <code>Entity</code> interface.
 60    * <br>The DOM Level 1 does not support editing entities, therefore
 61    * <code>entities</code> cannot be altered in any way.
 62    */
 63  0 public NamedNodeMap getEntities() {
 64  0 return null;
 65    }
 66   
 67    /**
 68    * A <code>NamedNodeMap</code> containing the notations declared in the
 69    * DTD. Duplicates are discarded. Every node in this map also implements
 70    * the <code>Notation</code> interface.
 71    * <br>The DOM Level 1 does not support editing notations, therefore
 72    * <code>notations</code> cannot be altered in any way.
 73    */
 74  0 public NamedNodeMap getNotations() {
 75  0 return null;
 76    }
 77   
 78    /**
 79    * The public identifier of the external subset.
 80    * @since DOM Level 2
 81    */
 82  0 public String getPublicId() {
 83  0 return null;
 84    }
 85   
 86    /**
 87    * The system identifier of the external subset.
 88    * @since DOM Level 2
 89    */
 90  0 public String getSystemId() {
 91  0 return null;
 92    }
 93   
 94    /**
 95    * The internal subset as a string.The actual content returned depends on
 96    * how much information is available to the implementation. This may
 97    * vary depending on various parameters, including the XML processor
 98    * used to build the document.
 99    * @since DOM Level 2
 100    */
 101  0 public String getInternalSubset() {
 102  0 return null;
 103    }
 104   
 105    //
 106    // DOM Level 3 Implementation
 107    //
 108   
 109    /**
 110    * @since DOM Level 3
 111    */
 112  0 public String getTextContent() {
 113  0 return null;
 114    }
 115   
 116    /**
 117    * Tests whether two nodes are equal.
 118    * This method tests for equality of nodes, not sameness (i.e., whether
 119    * the two nodes are references to the same object) which can be tested with
 120    * <code>Node.isSameNode()</code>. All nodes that are the same will also be
 121    * equal, though the reverse may not be true.
 122    * <br>
 123    * Two nodes are equal if and only if the following conditions are satisfied:
 124    * <ul><li>The two nodes are of the same type.</li>
 125    * <li>The following string attributes are equal: nodeName, localName,
 126    * namespaceURI, prefix, nodeValue. This is: they are both null, or they have
 127    * the same length and are character for character identical.</li>
 128    * <li>The attributes <code>NamedNodeMaps</code> are equal. This is: they are both null,
 129    * or they have the same length and for each node that exists in one map there
 130    * is a node that exists in the other map and is equal, although not
 131    * necessarily at the same index.</li>
 132    * <li>The childNodes NodeLists are equal. This is: they are both null, or they
 133    * have the same length and contain equal nodes at the same index. Note that
 134    * normalization can affect equality; to avoid this, nodes should be normalized
 135    * before being compared.</li></ul>
 136    * <br>
 137    * For two DocumentType nodes to be equal, the following conditions must also
 138    * be satisfied:
 139    * <ul><li>The following string attributes are equal: publicId, systemId,
 140    * internalSubset.</li>
 141    * <li>The entities <code>NamedNodeMaps</code> are equal.</li>
 142    * <li>The notations <code>NamedNodeMaps</code> are equal.</li></ul>
 143    * <br>
 144    * On the other hand, the following do not affect equality: the ownerDocument,
 145    * baseURI, and parentNode attributes, the specified attribute for Attr nodes,
 146    * the schemaTypeInfo attribute for Attr and Element nodes,
 147    * the Text.isElementContentWhitespace attribute for Text nodes, as well as any
 148    * user data or event listeners registered on the nodes.
 149    * @param other Node to test againts
 150    * @return true if nodes are equal, false otherwise
 151    * @since DOM Level 3
 152    */
 153  0 public boolean isEqualNode(Node other) {
 154  0 if (!super.isEqualNode(other)) {
 155  0 return false;
 156    }
 157   
 158  0 DocumentType otherDocType = (DocumentType) other;
 159  0 if (!(StringUtilities.equals(this.getPublicId(), otherDocType.getPublicId()) &&
 160    StringUtilities.equals(this.getSystemId(), otherDocType.getSystemId()) &&
 161    StringUtilities.equals(this.getInternalSubset(), otherDocType.getInternalSubset()))) {
 162  0 return false;
 163    }
 164   
 165  0 NamedNodeMap ent = getEntities();
 166  0 NamedNodeMap otherEnt = otherDocType.getEntities();
 167  0 if (!equalNodeMaps(ent, otherEnt)) {
 168  0 return false;
 169    }
 170   
 171  0 NamedNodeMap not = getNotations();
 172  0 NamedNodeMap otherNot = otherDocType.getNotations();
 173   
 174  0 return equalNodeMaps(not, otherNot);
 175    }
 176   
 177  0 private boolean equalNodeMaps(NamedNodeMap map1, NamedNodeMap map2) {
 178  0 if (map1 == null && map2 == null) {
 179  0 return true;
 180    }
 181  0 if (map1 == null || map2 == null) {
 182  0 return false;
 183    }
 184   
 185  0 if (map1.getLength() != map2.getLength()) {
 186  0 return false;
 187    }
 188   
 189  0 for (int i = 0; i < map1.getLength(); i++) {
 190  0 if (!((NodeImpl) map1.item(i)).isEqualNode(map2.item(i))) {
 191  0 return false;
 192    }
 193    }
 194   
 195  0 return true;
 196    }
 197    }