001 /*
002 * $Id: ValidationEventLocatorImpl.java,v 1.8 2002/11/21 01:46:27 ryans Exp $
003 *
004 * Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.
005 *
006 * This software is the proprietary information of Sun Microsystems, Inc.
007 * Use is subject to license terms.
008 *
009 */
010 package javax.xml.bind.helpers;
011
012 import java.net.URL;
013 import java.net.MalformedURLException;
014 import javax.xml.bind.ValidationEventLocator;
015 import org.w3c.dom.Node;
016 import org.xml.sax.Locator;
017 import org.xml.sax.SAXParseException;
018
019 /**
020 * Default implementation of the ValidationEventLocator interface.
021 *
022 * <p>
023 * JAXB providers are allowed to use whatever class that implements
024 * the ValidationEventLocator interface. This class is just provided for a
025 * convenience.
026 *
027 * @author <ul><li>Kohsuke Kawaguchi, Sun Microsystems, Inc.</li></ul>
028 * @version $Revision: 1.8 $
029 * @see javax.xml.bind.Validator
030 * @see javax.xml.bind.ValidationEventHandler
031 * @see javax.xml.bind.ValidationEvent
032 * @see javax.xml.bind.ValidationEventLocator
033 * @since JAXB1.0
034 */
035 public class ValidationEventLocatorImpl implements ValidationEventLocator
036 {
037 /**
038 * Creates an object with all fields unavailable.
039 */
040 public ValidationEventLocatorImpl() {
041 }
042
043 /**
044 * Constructs an object from an org.xml.sax.Locator.
045 *
046 * The object's ColumnNumber, LineNumber, and URL become available from the
047 * values returned by the locator's getColumnNumber(), getLineNumber(), and
048 * getSystemId() methods respectively. Node, Object, and Offset are not
049 * available.
050 *
051 * @param loc the SAX Locator object that will be used to populate this
052 * event locator.
053 * @throws IllegalArgumentException if the Locator is null
054 */
055 public ValidationEventLocatorImpl( Locator loc ) {
056 if( loc == null ) {
057 throw new IllegalArgumentException(
058 Messages.format( Messages.MUST_NOT_BE_NULL, "loc" ) );
059 }
060
061 this.url = toURL(loc.getSystemId());
062 this.columnNumber = loc.getColumnNumber();
063 this.lineNumber = loc.getLineNumber();
064 }
065
066 /**
067 * Constructs an object from the location information of a SAXParseException.
068 *
069 * The object's ColumnNumber, LineNumber, and URL become available from the
070 * values returned by the locator's getColumnNumber(), getLineNumber(), and
071 * getSystemId() methods respectively. Node, Object, and Offset are not
072 * available.
073 *
074 * @param e the SAXParseException object that will be used to populate this
075 * event locator.
076 * @throws IllegalArgumentException if the SAXParseException is null
077 */
078 public ValidationEventLocatorImpl( SAXParseException e ) {
079 if( e == null ) {
080 throw new IllegalArgumentException(
081 Messages.format( Messages.MUST_NOT_BE_NULL, "e" ) );
082 }
083
084 this.url = toURL(e.getSystemId());
085 this.columnNumber = e.getColumnNumber();
086 this.lineNumber = e.getLineNumber();
087 }
088
089 /**
090 * Constructs an object that points to a DOM Node.
091 *
092 * The object's Node becomes available. ColumnNumber, LineNumber, Object,
093 * Offset, and URL are not available.
094 *
095 * @param _node the DOM Node object that will be used to populate this
096 * event locator.
097 * @throws IllegalArgumentException if the Node is null
098 */
099 public ValidationEventLocatorImpl(Node _node) {
100 if( _node == null ) {
101 throw new IllegalArgumentException(
102 Messages.format( Messages.MUST_NOT_BE_NULL, "_node" ) );
103 }
104
105 this.node = _node;
106 }
107
108 /**
109 * Constructs an object that points to a JAXB content object.
110 *
111 * The object's Object becomes available. ColumnNumber, LineNumber, Node,
112 * Offset, and URL are not available.
113 *
114 * @param _object the Object that will be used to populate this
115 * event locator.
116 * @throws IllegalArgumentException if the Object is null
117 */
118 public ValidationEventLocatorImpl(Object _object) {
119 if( _object == null ) {
120 throw new IllegalArgumentException(
121 Messages.format( Messages.MUST_NOT_BE_NULL, "_object" ) );
122 }
123
124 this.object = _object;
125 }
126
127 /** Converts a system ID to an URL object. */
128 private static URL toURL( String systemId ) {
129 try {
130 return new URL(systemId);
131 } catch( MalformedURLException e ) {
132 // TODO: how should we handle system id here?
133 return null; // for now
134 }
135 }
136
137 private URL url = null;
138 private int offset = -1;
139 private int lineNumber = -1;
140 private int columnNumber = -1;
141 private Object object = null;
142 private Node node = null;
143
144
145 /**
146 * @see javax.xml.bind.ValidationEventLocator#getURL()
147 */
148 public URL getURL() {
149 return url;
150 }
151
152 /**
153 * Set the URL field on this event locator. Null values are allowed.
154 *
155 * @param _url the url
156 */
157 public void setURL( URL _url ) {
158 this.url = _url;
159 }
160
161 /**
162 * @see javax.xml.bind.ValidationEventLocator#getOffset()
163 */
164 public int getOffset() {
165 return offset;
166 }
167
168 /**
169 * Set the offset field on this event locator.
170 *
171 * @param _offset the offset
172 */
173 public void setOffset( int _offset ) {
174 this.offset = _offset;
175 }
176
177 /**
178 * @see javax.xml.bind.ValidationEventLocator#getLineNumber()
179 */
180 public int getLineNumber() {
181 return lineNumber;
182 }
183
184 /**
185 * Set the lineNumber field on this event locator.
186 *
187 * @param _lineNumber the line number
188 */
189 public void setLineNumber( int _lineNumber ) {
190 this.lineNumber = _lineNumber;
191 }
192
193 /**
194 * @see javax.xml.bind.ValidationEventLocator#getColumnNumber()
195 */
196 public int getColumnNumber() {
197 return columnNumber;
198 }
199
200 /**
201 * Set the columnNumber field on this event locator.
202 *
203 * @param _columnNumber the column number
204 */
205 public void setColumnNumber( int _columnNumber ) {
206 this.columnNumber = _columnNumber;
207 }
208
209 /**
210 * @see javax.xml.bind.ValidationEventLocator#getObject()
211 */
212 public Object getObject() {
213 return object;
214 }
215
216 /**
217 * Set the Object field on this event locator. Null values are allowed.
218 *
219 * @param _object the java content object
220 */
221 public void setObject( Object _object ) {
222 this.object = _object;
223 }
224
225 /**
226 * @see javax.xml.bind.ValidationEventLocator#getNode()
227 */
228 public Node getNode() {
229 return node;
230 }
231
232 /**
233 * Set the Node field on this event locator. Null values are allowed.
234 *
235 * @param _node the Node
236 */
237 public void setNode( Node _node ) {
238 this.node = _node;
239 }
240
241 }