KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > enhydra > apache > xerces > readers > XMLEntityReader


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 package org.enhydra.apache.xerces.readers;
59
60 import org.enhydra.apache.xerces.framework.XMLErrorReporter;
61
62 /**
63  * This is the class used by the scanner to process the XML data.
64  *
65  * @see org.enhydra.apache.xerces.framework.XMLParser
66  * @version $Id: XMLEntityReader.java,v 1.1.1.1 2003/03/10 16:34:39 taweili Exp $
67  */

68 abstract class XMLEntityReader implements XMLEntityHandler.EntityReader {
69     /*
70      * Instance variables.
71      */

72     protected XMLEntityHandler fEntityHandler = null;
73     protected XMLErrorReporter fErrorReporter = null;
74     protected boolean fSendCharDataAsCharArray;
75     protected XMLEntityHandler.CharDataHandler fCharDataHandler = null;
76     protected boolean fInCDSect = false;
77     private boolean fStillActive = true;
78     /*
79      * These are updated directly by the subclass implementation.
80      */

81     protected int fCarriageReturnCounter = 1;
82     protected int fLinefeedCounter = 1;
83     protected int fCharacterCounter = 1;
84     protected int fCurrentOffset = 0;
85     /**
86      * Constructor
87      */

88     protected XMLEntityReader(XMLEntityHandler entityHandler, XMLErrorReporter errorReporter, boolean sendCharDataAsCharArray) {
89         fEntityHandler = entityHandler;
90         fErrorReporter = errorReporter;
91         fSendCharDataAsCharArray = sendCharDataAsCharArray;
92         fCharDataHandler = fEntityHandler.getCharDataHandler();
93     }
94     /**
95      * Constructor
96      */

97     protected XMLEntityReader(XMLEntityHandler entityHandler, XMLErrorReporter errorReporter, boolean sendCharDataAsCharArray, int lineNumber, int columnNumber) {
98         fEntityHandler = entityHandler;
99         fErrorReporter = errorReporter;
100         fSendCharDataAsCharArray = sendCharDataAsCharArray;
101         fCharDataHandler = fEntityHandler.getCharDataHandler();
102         fLinefeedCounter = lineNumber;
103         fCharacterCounter = columnNumber;
104     }
105     protected void init(XMLEntityHandler entityHandler, XMLErrorReporter errorReporter, boolean sendCharDataAsCharArray, int lineNumber, int columnNumber) {
106         fEntityHandler = entityHandler;
107         fErrorReporter = errorReporter;
108         fSendCharDataAsCharArray = sendCharDataAsCharArray;
109         fCharDataHandler = fEntityHandler.getCharDataHandler();
110         fLinefeedCounter = lineNumber;
111         fCharacterCounter = columnNumber;
112         fStillActive = true;
113         fInCDSect = false;
114         fCarriageReturnCounter = 1;
115         fCurrentOffset = 0;
116     }
117
118     /**
119      * Return the current offset within this reader.
120      *
121      * @return The offset.
122      */

123     public int currentOffset() {
124         return fCurrentOffset;
125     }
126
127     /**
128      * Return the line number of the current position within the document that we are processing.
129      *
130      * @return The current line number.
131      */

132     public int getLineNumber() {
133         if (fLinefeedCounter > 1)
134             return fLinefeedCounter;
135         else
136             return fCarriageReturnCounter;
137     }
138
139     /**
140      * Return the column number of the current position within the document that we are processing.
141      *
142      * @return The current column number.
143      */

144     public int getColumnNumber() {
145         return fCharacterCounter;
146     }
147
148     /**
149      * This method is provided for scanner implementations.
150      */

151     public void setInCDSect(boolean inCDSect) {
152         fInCDSect = inCDSect;
153     }
154
155     /**
156      * This method is provided for scanner implementations.
157      */

158     public boolean getInCDSect() {
159         return fInCDSect;
160     }
161
162     /**
163      * This method is called by the reader subclasses at the end of input.
164      */

165     protected XMLEntityHandler.EntityReader changeReaders() throws Exception JavaDoc {
166         XMLEntityHandler.EntityReader nextReader = null;
167         if (fStillActive) {
168             nextReader = fEntityHandler.changeReaders();
169             fStillActive = false;
170            // Allow these following three fields to be GC-ed.
171
fEntityHandler = null;
172             fErrorReporter = null;
173             fCharDataHandler = null;
174         }
175         return nextReader;
176     }
177 }
178
Popular Tags