KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > org > apache > html > internal > dom > 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 com.sun.org.apache.html.internal.dom;
115
116 import com.sun.org.apache.xerces.internal.dom.DeepNodeListImpl;
117 import com.sun.org.apache.xerces.internal.dom.ElementImpl;
118 import com.sun.org.apache.xerces.internal.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  * @version $Id: NameNodeListImpl.java,v 1.6 2003/05/08 20:13:09 elena Exp $
127  * @since PR-DOM-Level-1-19980818.
128  * @see DeepNodeListImpl
129  */

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

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

190 } // class NameNodeListImpl
191
Popular Tags