src/share/classes/org/jcp/xml/dsig/internal/dom/DOMSubTreeData.java
Print this page
@@ -1,30 +1,32 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
*/
-/*
- * Copyright 2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
*/
/*
* Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
*/
/*
- * $Id: DOMSubTreeData.java,v 1.2 2008/07/24 15:20:32 mullan Exp $
+ * $Id$
*/
package org.jcp.xml.dsig.internal.dom;
import javax.xml.crypto.NodeSetData;
import java.util.ArrayList;
@@ -43,21 +45,19 @@
* first to an XPath node-set.
*/
public class DOMSubTreeData implements NodeSetData {
private boolean excludeComments;
- private Iterator ni;
private Node root;
public DOMSubTreeData(Node root, boolean excludeComments) {
this.root = root;
- this.ni = new DelayedNodeIterator(root, excludeComments);
this.excludeComments = excludeComments;
}
public Iterator iterator() {
- return ni;
+ return new DelayedNodeIterator(root, excludeComments);
}
public Node getRoot() {
return root;
}
@@ -68,14 +68,14 @@
/**
* This is an Iterator that contains a backing node-set that is
* not populated until the caller first attempts to advance the iterator.
*/
- static class DelayedNodeIterator implements Iterator {
+ static class DelayedNodeIterator implements Iterator<Node> {
private Node root;
- private List nodeSet;
- private ListIterator li;
+ private List<Node> nodeSet;
+ private ListIterator<Node> li;
private boolean withComments;
DelayedNodeIterator(Node root, boolean excludeComments) {
this.root = root;
this.withComments = !excludeComments;
@@ -87,17 +87,17 @@
li = nodeSet.listIterator();
}
return li.hasNext();
}
- public Object next() {
+ public Node next() {
if (nodeSet == null) {
nodeSet = dereferenceSameDocumentURI(root);
li = nodeSet.listIterator();
}
if (li.hasNext()) {
- return (Node) li.next();
+ return li.next();
} else {
throw new NoSuchElementException();
}
}
@@ -110,12 +110,12 @@
*
* @param node the node (document or element) referenced by the
* URI fragment. If null, returns an empty set.
* @return a set of nodes (minus any comment nodes)
*/
- private List dereferenceSameDocumentURI(Node node) {
- List nodeSet = new ArrayList();
+ private List<Node> dereferenceSameDocumentURI(Node node) {
+ List<Node> nodeSet = new ArrayList<Node>();
if (node != null) {
nodeSetMinusCommentNodes(node, nodeSet, null);
}
return nodeSet;
}
@@ -127,37 +127,49 @@
*
* @param node the node to traverse
* @param nodeSet the set of nodes traversed so far
* @param the previous sibling node
*/
- private void nodeSetMinusCommentNodes(Node node, List nodeSet,
- Node prevSibling) {
+ @SuppressWarnings("fallthrough")
+ private void nodeSetMinusCommentNodes(Node node, List<Node> nodeSet,
+ Node prevSibling)
+ {
switch (node.getNodeType()) {
case Node.ELEMENT_NODE :
NamedNodeMap attrs = node.getAttributes();
if (attrs != null) {
for (int i = 0, len = attrs.getLength(); i < len; i++) {
nodeSet.add(attrs.item(i));
}
}
nodeSet.add(node);
- case Node.DOCUMENT_NODE :
Node pSibling = null;
for (Node child = node.getFirstChild(); child != null;
child = child.getNextSibling()) {
nodeSetMinusCommentNodes(child, nodeSet, pSibling);
pSibling = child;
}
break;
+ case Node.DOCUMENT_NODE :
+ pSibling = null;
+ for (Node child = node.getFirstChild(); child != null;
+ child = child.getNextSibling()) {
+ nodeSetMinusCommentNodes(child, nodeSet, pSibling);
+ pSibling = child;
+ }
+ break;
case Node.TEXT_NODE :
case Node.CDATA_SECTION_NODE:
// emulate XPath which only returns the first node in
// contiguous text/cdata nodes
if (prevSibling != null &&
(prevSibling.getNodeType() == Node.TEXT_NODE ||
- prevSibling.getNodeType() == Node.CDATA_SECTION_NODE)){ return;
+ prevSibling.getNodeType() == Node.CDATA_SECTION_NODE)) {
+ return;
}
+ nodeSet.add(node);
+ break;
case Node.PROCESSING_INSTRUCTION_NODE :
nodeSet.add(node);
break;
case Node.COMMENT_NODE:
if (withComments) {