001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the "License");
007 * you may not use this file except in compliance with the License.
008 * You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 /*
019 * $Id: SerializableLocatorImpl.java 468655 2006-10-28 07:12:06Z minchau $
020 */
021 package org.apache.xml.utils;
022
023
024 /**
025 * The standard SAX implementation of LocatorImpl is not serializable,
026 * limiting its utility as "a persistent snapshot of a locator".
027 * This is a quick hack to make it so. Note that it makes more sense
028 * in many cases to set up fields to hold this data rather than pointing
029 * at another object... but that decision should be made on architectural
030 * grounds rather than serializability.
031 *<p>
032 * It isn't clear whether subclassing LocatorImpl and adding serialization
033 * methods makes more sense than copying it and just adding Serializable
034 * to its interface. Since it's so simple, I've taken the latter approach
035 * for now.
036 *
037 * @see org.xml.sax.helpers.LocatorImpl
038 * @see org.xml.sax.Locator Locator
039 * @since XalanJ2
040 * @author Joe Kesselman
041 * @version 1.0
042 */
043 public class SerializableLocatorImpl
044 implements org.xml.sax.Locator, java.io.Serializable
045
046 {
047 static final long serialVersionUID = -2660312888446371460L;
048 /**
049 * Zero-argument constructor.
050 *
051 * <p>SAX says "This will not normally be useful, since the main purpose
052 * of this class is to make a snapshot of an existing Locator." In fact,
053 * it _is_ sometimes useful when you want to construct a new Locator
054 * pointing to a specific location... which, after all, is why the
055 * setter methods are provided.
056 * </p>
057 */
058 public SerializableLocatorImpl ()
059 {
060 }
061
062
063 /**
064 * Copy constructor.
065 *
066 * <p>Create a persistent copy of the current state of a locator.
067 * When the original locator changes, this copy will still keep
068 * the original values (and it can be used outside the scope of
069 * DocumentHandler methods).</p>
070 *
071 * @param locator The locator to copy.
072 */
073 public SerializableLocatorImpl (org.xml.sax.Locator locator)
074 {
075 setPublicId(locator.getPublicId());
076 setSystemId(locator.getSystemId());
077 setLineNumber(locator.getLineNumber());
078 setColumnNumber(locator.getColumnNumber());
079 }
080
081
082 ////////////////////////////////////////////////////////////////////
083 // Implementation of org.xml.sax.Locator
084 ////////////////////////////////////////////////////////////////////
085
086
087 /**
088 * Return the saved public identifier.
089 *
090 * @return The public identifier as a string, or null if none
091 * is available.
092 * @see org.xml.sax.Locator#getPublicId
093 * @see #setPublicId
094 */
095 public String getPublicId ()
096 {
097 return publicId;
098 }
099
100
101 /**
102 * Return the saved system identifier.
103 *
104 * @return The system identifier as a string, or null if none
105 * is available.
106 * @see org.xml.sax.Locator#getSystemId
107 * @see #setSystemId
108 */
109 public String getSystemId ()
110 {
111 return systemId;
112 }
113
114
115 /**
116 * Return the saved line number (1-based).
117 *
118 * @return The line number as an integer, or -1 if none is available.
119 * @see org.xml.sax.Locator#getLineNumber
120 * @see #setLineNumber
121 */
122 public int getLineNumber ()
123 {
124 return lineNumber;
125 }
126
127
128 /**
129 * Return the saved column number (1-based).
130 *
131 * @return The column number as an integer, or -1 if none is available.
132 * @see org.xml.sax.Locator#getColumnNumber
133 * @see #setColumnNumber
134 */
135 public int getColumnNumber ()
136 {
137 return columnNumber;
138 }
139
140
141 ////////////////////////////////////////////////////////////////////
142 // Setters for the properties (not in org.xml.sax.Locator)
143 ////////////////////////////////////////////////////////////////////
144
145
146 /**
147 * Set the public identifier for this locator.
148 *
149 * @param publicId The new public identifier, or null
150 * if none is available.
151 * @see #getPublicId
152 */
153 public void setPublicId (String publicId)
154 {
155 this.publicId = publicId;
156 }
157
158
159 /**
160 * Set the system identifier for this locator.
161 *
162 * @param systemId The new system identifier, or null
163 * if none is available.
164 * @see #getSystemId
165 */
166 public void setSystemId (String systemId)
167 {
168 this.systemId = systemId;
169 }
170
171
172 /**
173 * Set the line number for this locator (1-based).
174 *
175 * @param lineNumber The line number, or -1 if none is available.
176 * @see #getLineNumber
177 */
178 public void setLineNumber (int lineNumber)
179 {
180 this.lineNumber = lineNumber;
181 }
182
183
184 /**
185 * Set the column number for this locator (1-based).
186 *
187 * @param columnNumber The column number, or -1 if none is available.
188 * @see #getColumnNumber
189 */
190 public void setColumnNumber (int columnNumber)
191 {
192 this.columnNumber = columnNumber;
193 }
194
195
196 ////////////////////////////////////////////////////////////////////
197 // Internal state.
198 ////////////////////////////////////////////////////////////////////
199
200 /**
201 * The public ID.
202 * @serial
203 */
204 private String publicId;
205
206 /**
207 * The system ID.
208 * @serial
209 */
210 private String systemId;
211
212 /**
213 * The line number.
214 * @serial
215 */
216 private int lineNumber;
217
218 /**
219 * The column number.
220 * @serial
221 */
222 private int columnNumber;
223
224 }
225
226 // end of LocatorImpl.java