1/* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18/* 19 * $Id: SAXSourceLocator.java 468655 2006-10-28 07:12:06Z minchau $ 20 */ 21package org.apache.xml.utils; 22 23import java.io.Serializable; 24 25import javax.xml.transform.SourceLocator; 26 27import org.xml.sax.Locator; 28import org.xml.sax.SAXParseException; 29import org.xml.sax.helpers.LocatorImpl; 30 31/** 32 * Class SAXSourceLocator extends org.xml.sax.helpers.LocatorImpl 33 * for the purpose of implementing the SourceLocator interface, 34 * and thus can be both a SourceLocator and a SAX Locator. 35 */ 36public class SAXSourceLocator extends LocatorImpl 37 implements SourceLocator, Serializable 38{ 39 static final long serialVersionUID = 3181680946321164112L; 40 /** The SAX Locator object. 41 * @serial 42 */ 43 Locator m_locator; 44 45 /** 46 * Constructor SAXSourceLocator 47 * 48 */ 49 public SAXSourceLocator(){} 50 51 /** 52 * Constructor SAXSourceLocator 53 * 54 * 55 * @param locator Source locator 56 */ 57 public SAXSourceLocator(Locator locator) 58 { 59 m_locator = locator; 60 this.setColumnNumber(locator.getColumnNumber()); 61 this.setLineNumber(locator.getLineNumber()); 62 this.setPublicId(locator.getPublicId()); 63 this.setSystemId(locator.getSystemId()); 64 } 65 66 /** 67 * Constructor SAXSourceLocator 68 * 69 * 70 * @param locator Source locator 71 */ 72 public SAXSourceLocator(javax.xml.transform.SourceLocator locator) 73 { 74 m_locator = null; 75 this.setColumnNumber(locator.getColumnNumber()); 76 this.setLineNumber(locator.getLineNumber()); 77 this.setPublicId(locator.getPublicId()); 78 this.setSystemId(locator.getSystemId()); 79 } 80 81 82 /** 83 * Constructor SAXSourceLocator 84 * 85 * 86 * @param spe SAXParseException exception. 87 */ 88 public SAXSourceLocator(SAXParseException spe) 89 { 90 this.setLineNumber( spe.getLineNumber() ); 91 this.setColumnNumber( spe.getColumnNumber() ); 92 this.setPublicId( spe.getPublicId() ); 93 this.setSystemId( spe.getSystemId() ); 94 } 95 96 /** 97 * Return the public identifier for the current document event. 98 * 99 * <p>The return value is the public identifier of the document 100 * entity or of the external parsed entity in which the markup 101 * triggering the event appears.</p> 102 * 103 * @return A string containing the public identifier, or 104 * null if none is available. 105 * @see #getSystemId 106 */ 107 public String getPublicId() 108 { 109 return (null == m_locator) ? super.getPublicId() : m_locator.getPublicId(); 110 } 111 112 /** 113 * Return the system identifier for the current document event. 114 * 115 * <p>The return value is the system identifier of the document 116 * entity or of the external parsed entity in which the markup 117 * triggering the event appears.</p> 118 * 119 * <p>If the system identifier is a URL, the parser must resolve it 120 * fully before passing it to the application.</p> 121 * 122 * @return A string containing the system identifier, or null 123 * if none is available. 124 * @see #getPublicId 125 */ 126 public String getSystemId() 127 { 128 return (null == m_locator) ? super.getSystemId() : m_locator.getSystemId(); 129 } 130 131 /** 132 * Return the line number where the current document event ends. 133 * 134 * <p><strong>Warning:</strong> The return value from the method 135 * is intended only as an approximation for the sake of error 136 * reporting; it is not intended to provide sufficient information 137 * to edit the character content of the original XML document.</p> 138 * 139 * <p>The return value is an approximation of the line number 140 * in the document entity or external parsed entity where the 141 * markup triggering the event appears.</p> 142 * 143 * @return The line number, or -1 if none is available. 144 * @see #getColumnNumber 145 */ 146 public int getLineNumber() 147 { 148 return (null == m_locator) ? super.getLineNumber() : m_locator.getLineNumber(); 149 } 150 151 /** 152 * Return the column number where the current document event ends. 153 * 154 * <p><strong>Warning:</strong> The return value from the method 155 * is intended only as an approximation for the sake of error 156 * reporting; it is not intended to provide sufficient information 157 * to edit the character content of the original XML document.</p> 158 * 159 * <p>The return value is an approximation of the column number 160 * in the document entity or external parsed entity where the 161 * markup triggering the event appears.</p> 162 * 163 * @return The column number, or -1 if none is available. 164 * @see #getLineNumber 165 */ 166 public int getColumnNumber() 167 { 168 return (null == m_locator) ? super.getColumnNumber() : m_locator.getColumnNumber(); 169 } 170} 171