KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > enhydra > xml > xhtml > dom > xerces > NameNodeListImpl


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  *
5  * Copyright (c) 1999,2000 The Apache Software Foundation. All rights
6  * reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by the
23  * Apache Software Foundation (http://www.apache.org/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. The names "Xerces" and "Apache Software Foundation" must
28  * not be used to endorse or promote products derived from this
29  * software without prior written permission. For written
30  * permission, please contact apache@apache.org.
31  *
32  * 5. Products derived from this software may not be called "Apache",
33  * nor may "Apache" appear in their name, without prior written
34  * permission of the Apache Software Foundation.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  * ====================================================================
49  *
50  * This software consists of voluntary contributions made by many
51  * individuals on behalf of the Apache Software Foundation and was
52  * originally based on software copyright (c) 1999, International
53  * Business Machines, Inc., http://www.apache.org. For more
54  * information on the Apache Software Foundation, please see
55  * <http://www.apache.org/>.
56  */

57 /*
58  * The Apache Software License, Version 1.1
59  *
60  *
61  * Copyright (c) 1999 The Apache Software Foundation. All rights
62  * reserved.
63  *
64  * Redistribution and use in source and binary forms, with or without
65  * modification, are permitted provided that the following conditions
66  * are met:
67  *
68  * 1. Redistributions of source code must retain the above copyright
69  * notice, this list of conditions and the following disclaimer.
70  *
71  * 2. Redistributions in binary form must reproduce the above copyright
72  * notice, this list of conditions and the following disclaimer in
73  * the documentation and/or other materials provided with the
74  * distribution.
75  *
76  * 3. The end-user documentation included with the redistribution,
77  * if any, must include the following acknowledgment:
78  * "This product includes software developed by the
79  * Apache Software Foundation (http://www.apache.org/)."
80  * Alternately, this acknowledgment may appear in the software itself,
81  * if and wherever such third-party acknowledgments normally appear.
82  *
83  * 4. The names "Xerces" and "Apache Software Foundation" must
84  * not be used to endorse or promote products derived from this
85  * software without prior written permission. For written
86  * permission, please contact apache@apache.org.
87  *
88  * 5. Products derived from this software may not be called "Apache",
89  * nor may "Apache" appear in their name, without prior written
90  * permission of the Apache Software Foundation.
91  *
92  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
93  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
94  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
95  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
96  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
98  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
99  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
100  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
101  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
102  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
103  * SUCH DAMAGE.
104  * ====================================================================
105  *
106  * This software consists of voluntary contributions made by many
107  * individuals on behalf of the Apache Software Foundation and was
108  * originally based on software copyright (c) 1999, International
109  * Business Machines, Inc., http://www.apache.org. For more
110  * information on the Apache Software Foundation, please see
111  * <http://www.apache.org/>.
112  */

113
114 package org.enhydra.xml.xhtml.dom.xerces;
115
116 import org.enhydra.apache.xerces.dom.DeepNodeListImpl;
117 import org.enhydra.apache.xerces.dom.ElementImpl;
118 import org.enhydra.apache.xerces.dom.NodeImpl;
119 import org.w3c.dom.Node JavaDoc;
120 import org.w3c.dom.NodeList JavaDoc;
121
122 /**
123  * This class implements the DOM's NodeList behavior for
124  * HTMLDocuemnt.getElementsByName().
125  *
126  * @since PR-DOM-Level-1-19980818.
127  * @see DeepNodeListImpl
128  */

129 class NameNodeListImpl
130     extends DeepNodeListImpl
131     implements NodeList JavaDoc {
132     
133     
134     /** Constructor. */
135     public NameNodeListImpl(NodeImpl rootNode, String JavaDoc tagName) {
136     super( rootNode, tagName );
137     }
138     
139
140     /**
141      * Iterative tree-walker. When you have a Parent link, there's often no
142      * need to resort to recursion. NOTE THAT only Element nodes are matched
143      * since we're specifically supporting getElementsByTagName().
144      */

145     protected Node JavaDoc nextMatchingElementAfter(Node JavaDoc current) {
146         
147         Node JavaDoc next;
148         while (current != null) {
149             // Look down to first child.
150
if (current.hasChildNodes()) {
151                 current = (current.getFirstChild());
152             }
153             
154             // Look right to sibling (but not from root!)
155
else if (current != rootNode && null != (next = current.getNextSibling())) {
156                 current = next;
157             }
158             
159             // Look up and right (but not past root!)
160
else {
161                 next = null;
162                 for (; current != rootNode; // Stop when we return to starting point
163
current = current.getParentNode()) {
164                     
165                     next = current.getNextSibling();
166                     if (next != null)
167                         break;
168                 }
169                 current = next;
170             }
171             
172             // Have we found an Element with the right tagName?
173
// ("*" matches anything.)
174
if (current != rootNode && current != null
175                 && current.getNodeType() == Node.ELEMENT_NODE ) {
176                 String JavaDoc name = ((ElementImpl) current).getAttribute( "name" );
177                 if ( name.equals("*") || name.equals(tagName))
178                     return current;
179             }
180             
181             // Otherwise continue walking the tree
182
}
183         
184         // Fell out of tree-walk; no more instances found
185
return null;
186         
187     } // nextMatchingElementAfter(int):Node
188

189 } // class NameNodeListImpl
190
Popular Tags