001 /*
002 * Copyright (c) 2007 Henri Sivonen
003 * Copyright (c) 2007 Mozilla Foundation
004 *
005 * Permission is hereby granted, free of charge, to any person obtaining a
006 * copy of this software and associated documentation files (the "Software"),
007 * to deal in the Software without restriction, including without limitation
008 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
009 * and/or sell copies of the Software, and to permit persons to whom the
010 * Software is furnished to do so, subject to the following conditions:
011 *
012 * The above copyright notice and this permission notice shall be included in
013 * all copies or substantial portions of the Software.
014 *
015 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
016 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
017 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
018 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
019 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
020 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
021 * DEALINGS IN THE SOFTWARE.
022 */
023
024 package nu.validator.saxtree;
025
026 import java.util.List;
027
028 import org.xml.sax.Attributes;
029 import org.xml.sax.Locator;
030 import org.xml.sax.SAXException;
031
032 public abstract class Node implements Locator {
033
034 private final String systemId;
035 private final String publicId;
036 private final int column;
037 private final int line;
038
039 private Node nextSibling = null;
040
041 private ParentNode parentNode = null;
042
043 Node(Locator locator) {
044 if (locator == null) {
045 this.systemId = null;
046 this.publicId = null;
047 this.column = -1;
048 this.line = -1;
049 } else {
050 this.systemId = locator.getSystemId();
051 this.publicId = locator.getPublicId();
052 this.column = locator.getColumnNumber();
053 this.line = locator.getLineNumber();
054 }
055 }
056
057 public int getColumnNumber() {
058 return column;
059 }
060
061 public int getLineNumber() {
062 return line;
063 }
064
065 public String getPublicId() {
066 return publicId;
067 }
068
069 public String getSystemId() {
070 return systemId;
071 }
072
073 abstract void visit(TreeParser treeParser) throws SAXException;
074
075 void revisit(TreeParser treeParser) throws SAXException {
076 return;
077 }
078
079 public Node getFirstChild() {
080 return null;
081 }
082
083 /**
084 * Returns the nextSibling.
085 *
086 * @return the nextSibling
087 */
088 public final Node getNextSibling() {
089 return nextSibling;
090 }
091
092 /**
093 * Sets the nextSibling.
094 *
095 * @param nextSibling the nextSibling to set
096 */
097 void setNextSibling(Node nextSibling) {
098 this.nextSibling = nextSibling;
099 }
100
101
102 /**
103 * Returns the parentNode.
104 *
105 * @return the parentNode
106 */
107 public final ParentNode getParentNode() {
108 return parentNode;
109 }
110
111 public abstract NodeType getNodeType();
112
113 // Subclass-specific accessors that are hoisted here to
114 // avoid casting.
115
116 /**
117 * Sets the parentNode.
118 *
119 * @param parentNode the parentNode to set
120 */
121 void setParentNode(ParentNode parentNode) {
122 this.parentNode = parentNode;
123 }
124
125 public void detach() {
126 if (parentNode != null) {
127 parentNode.removeChild(this);
128 parentNode = null;
129 }
130 }
131
132 /**
133 * Returns the name.
134 *
135 * @return the name
136 */
137 public String getName() {
138 throw new UnsupportedOperationException();
139 }
140
141 /**
142 * Returns the publicIdentifier.
143 *
144 * @return the publicIdentifier
145 */
146 public String getPublicIdentifier() {
147 throw new UnsupportedOperationException();
148 }
149
150 /**
151 * Returns the systemIdentifier.
152 *
153 * @return the systemIdentifier
154 */
155 public String getSystemIdentifier() {
156 throw new UnsupportedOperationException();
157 }
158
159 /**
160 * Returns the attributes.
161 *
162 * @return the attributes
163 */
164 public Attributes getAttributes() {
165 throw new UnsupportedOperationException();
166 }
167
168 /**
169 * Returns the localName.
170 *
171 * @return the localName
172 */
173 public String getLocalName() {
174 throw new UnsupportedOperationException();
175 }
176
177 /**
178 * Returns the prefixMappings.
179 *
180 * @return the prefixMappings
181 */
182 public List<PrefixMapping> getPrefixMappings() {
183 throw new UnsupportedOperationException();
184 }
185
186 /**
187 * Returns the qName.
188 *
189 * @return the qName
190 */
191 public String getQName() {
192 throw new UnsupportedOperationException();
193 }
194
195 /**
196 * Returns the uri.
197 *
198 * @return the uri
199 */
200 public String getUri() {
201 throw new UnsupportedOperationException();
202 }
203
204 /**
205 * Returns the data.
206 *
207 * @return the data
208 */
209 public String getData() {
210 throw new UnsupportedOperationException();
211 }
212
213 /**
214 * Returns the target.
215 *
216 * @return the target
217 */
218 public String getTarget() {
219 throw new UnsupportedOperationException();
220 }
221 }