001 /*
002 * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025
026 package javax.script;
027
028 /**
029 * The generic <code>Exception</code> class for the Scripting APIs. Checked
030 * exception types thrown by underlying scripting implementations must be wrapped in instances of
031 * <code>ScriptException</code>. The class has members to store line and column numbers and
032 * filenames if this information is available.
033 *
034 * @author Mike Grogan
035 * @version 1.0
036 * @since 1.6
037 */
038 public class ScriptException extends Exception {
039
040 private String fileName;
041 private int lineNumber;
042 private int columnNumber;
043
044 /**
045 * Creates a <code>ScriptException</code> with a String to be used in its message.
046 * Filename, and line and column numbers are unspecified.
047 *
048 * @param s The String to use in the message.
049 */
050 public ScriptException(String s) {
051 super (s);
052 fileName = null;
053 lineNumber = -1;
054 columnNumber = -1;
055 }
056
057 /**
058 * Creates a <code>ScriptException</code> wrapping an <code>Exception</code> thrown by an underlying
059 * interpreter. Line and column numbers and filename are unspecified.
060 *
061 * @param e The wrapped <code>Exception</code>.
062 */
063 public ScriptException(Exception e) {
064 super (e);
065 fileName = null;
066 lineNumber = -1;
067 columnNumber = -1;
068 }
069
070 /**
071 * Creates a <code>ScriptException</code> with message, filename and linenumber to
072 * be used in error messages.
073 *
074 * @param message The string to use in the message
075 *
076 * @param fileName The file or resource name describing the location of a script error
077 * causing the <code>ScriptException</code> to be thrown.
078 *
079 * @param lineNumber A line number describing the location of a script error causing
080 * the <code>ScriptException</code> to be thrown.
081 */
082 public ScriptException(String message, String fileName,
083 int lineNumber) {
084 super (message);
085 this .fileName = fileName;
086 this .lineNumber = lineNumber;
087 this .columnNumber = -1;
088 }
089
090 /**
091 * <code>ScriptException</code> constructor specifying message, filename, line number
092 * and column number.
093 * @param message The message.
094 * @param fileName The filename
095 * @param lineNumber the line number.
096 * @param columnNumber the column number.
097 */
098 public ScriptException(String message, String fileName,
099 int lineNumber, int columnNumber) {
100 super (message);
101 this .fileName = fileName;
102 this .lineNumber = lineNumber;
103 this .columnNumber = columnNumber;
104 }
105
106 /**
107 * Returns a message containing the String passed to a constructor as well as
108 * line and column numbers and filename if any of these are known.
109 * @return The error message.
110 */
111 public String getMessage() {
112 String ret = super .getMessage();
113 if (fileName != null) {
114 ret += (" in " + fileName);
115 if (lineNumber != -1) {
116 ret += " at line number " + lineNumber;
117 }
118
119 if (columnNumber != -1) {
120 ret += " at column number " + columnNumber;
121 }
122 }
123
124 return ret;
125 }
126
127 /**
128 * Get the line number on which an error occurred.
129 * @return The line number. Returns -1 if a line number is unavailable.
130 */
131 public int getLineNumber() {
132 return lineNumber;
133 }
134
135 /**
136 * Get the column number on which an error occurred.
137 * @return The column number. Returns -1 if a column number is unavailable.
138 */
139 public int getColumnNumber() {
140 return columnNumber;
141 }
142
143 /**
144 * Get the source of the script causing the error.
145 * @return The file name of the script or some other string describing the script
146 * source. May return some implementation-defined string such as <i><unknown></i>
147 * if a description of the source is unavailable.
148 */
149 public String getFileName() {
150 return fileName;
151 }
152 }
|