1 /*
2 wsmo4j - a WSMO API and Reference Implementation
3 Copyright (c) 2004-2005, OntoText Lab. / SIRMA
4 University of Innsbruck, Austria
5 This library is free software; you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License as published by the Free
7 Software Foundation; either version 2.1 of the License, or (at your option)
8 any later version.
9 This library is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12 details.
13 You should have received a copy of the GNU Lesser General Public License along
14 with this library; if not, write to the Free Software Foundation, Inc.,
15 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 */
17
18 /**
19 * <p>Title: WSMO4J</p>
20 * <p>Description: WSMO API and a Reference Implementation</p>
21 * <p>Copyright: Copyright (c) 2004-2005</p>
22 * <p>Company: OntoText Lab. / SIRMA </p>
23 */
24
25 package org.wsmo.wsml;
26
27
28 /**
29 * This is a <b>checked</b> exception thrown when the stream being parsed
30 * contains syntax errors or is invalid w.r.t. the predefined grammar
31 *
32 * @author not attributable
33 * @version $Revision: 1156 $ $Date: 2005-10-17 17:57:00 +0300 (Mon, 17 Oct 2005) $
34 */
35 public class ParserException
36 extends Exception {
37
38 //remember to change when updating class!
39 private static final long serialVersionUID = 4051040887066865975L;
40
41 public static final String NO_NAMESPACE = "Parsing sQName, but could not find namespace defintion. ";
42 public static final String NAMESPACE_PREFIX_NOT_FOUND = "Parsing sQName, but could not find namespace defintion for prefix. ";
43 public static final String NOT_VALID_PARSETREE = "Could not parse WSML: ";
44 public static final String ANONYMOUS_ID_AS_ATOM = "Anonymous Id not allowed as identifier for Atom. ";
45 public static final String NB_ANONYMOUS_ID_AS_ATOM = "Numbered Anonymous Id not allowed as identifier for Atom. ";
46 public static final String VALUE_AS_ATOM = "Value not allowed as identifier of an atom. ";
47 public static final String FUNCTION_SYMBOL_AS_ATOM = "Function Symbol not allowed as identifier of an atom. ";
48 public static final String VARIABLE_AS_ATOM = "Variable not allowed as identifier of an atom. ";
49 public static final String WRONG_ARG_SIMPLE_DT = "Argument of a simple data value must be singular and of type wsml#string. ";
50
51 private int line = -1;
52 private int pos = -1;
53 private String expectedToken = null;
54 private String foundToken = null;
55
56 /**
57 * Creates a Parser Exception indicating a problem found when
58 * processing an InputStream.
59 *
60 * @param msg message indicating the error that occured. Note
61 * that this class appends some exta information (if given) like the
62 * line and position of the error when "getMessage()" is called.
63 *
64 * @param cause the initial cause of the error. In case the
65 * problem is caused by the underlying parser (e.g. sableCC it
66 * will contain this Exception
67 */
68 public ParserException(String msg, Throwable cause) {
69 super(msg, cause);
70 }
71
72 /**
73 * Indicates the line where the parsing error occured.
74 *
75 * @return line with parsing error or -1 if not known.
76 */
77 public int getErrorLine() {
78 return line;
79 }
80
81 /**
82 * Sets the line where the error occured.
83 *
84 * @param line where the error occured.
85 */
86 public void setErrorLine(int line) {
87 this.line=line;
88 }
89
90 /**
91 * inicates the position where the parsing error occured.
92 *
93 * @return position where parsing error occured or -1 if not known.
94 */
95 public int getErrorPos() {
96 return pos;
97 }
98
99 /**
100 * sets the position (column) where the error occured.
101 *
102 * @param pos of error.
103 */
104 public void setErrorPos(int pos) {
105 this.pos=pos;
106 }
107
108 /**
109 * returns the token that was expected.
110 *
111 * @return the token that was expected or null if not known.
112 */
113 public String getFoundToken(){
114 return this.foundToken;
115 }
116
117 /**
118 * set the token that was found during parsing.
119 *
120 * @param token the token that was found during parsing.
121 */
122 public void setFoundToken(String token){
123 this.foundToken=token;
124 }
125
126 /**
127 * Indicates which token was expecting when parsing error occured
128 *
129 * @return list of token (comma sperated) that are expecting at the position
130 * with parsing error, null if not known.
131 */
132 public String getExpectedToken() {
133 return expectedToken;
134 }
135
136 /**
137 * sets the token that was expected when parsing error occured.
138 *
139 * @param token the toke that was expected when parsing error occured.
140 */
141 public void setExpectedToken(String token){
142 this.expectedToken=token;
143 }
144
145 /**
146 * Returns human readable description of error.
147 * @return message indicating the error that occured. Note
148 * that this class appends some exta information (if given) like the
149 * line and position of the error when "getMessage()" is called.
150 * @see java.lang.Throwable#getMessage()
151 */
152 public String getMessage() {
153 String details ="";
154 if (line!=-1) details = "(Line: "+line+" Pos: "+pos;
155 if (expectedToken!=null) details += " Expected:"+expectedToken;
156 if (foundToken!=null) details += " Found:"+foundToken;
157 if (line!=-1) details += ")";
158 return super.getMessage()+details;
159 }
160 }
161 /*
162 * $Log$
163 * Revision 1.7 2005/10/17 14:57:00 ohamano
164 * new exception text for simple data values without singular argument of type wsml#string
165 *
166 * Revision 1.6 2005/09/21 08:15:39 holgerlausen
167 * fixing java doc, removing asString()
168 *
169 * Revision 1.5 2005/08/04 05:48:26 holgerlausen
170 * added found token
171 *
172 * Revision 1.4 2005/08/01 13:01:27 holgerlausen
173 * more fine grained Error Handling
174 *
175 * Revision 1.3 2005/07/04 11:44:40 marin_dimitrov
176 * formatting?
177 *
178 * Revision 1.2 2005/06/30 09:43:28 alex_simov
179 * refactoring: org.wsmo.parser -> org.wsmo.wsml.*
180 *
181 * Revision 1.2 2005/06/28 09:00:42 holgerlausen
182 * extended ParserException and added enhanced version to WSMLAnalyzer to get better parser error
183 *
184 * Revision 1.1 2005/06/27 08:51:50 alex_simov
185 * refactoring: *.io.locator -> *.locator
186 * refactoring: *.io.parser -> *.parser
187 * refactoring: *.io.datastore -> *.datastore
188 *
189 * Revision 1.4 2005/06/22 14:40:49 alex_simov
190 * Copyright header added/updated
191 *
192 * Revision 1.3 2005/06/01 10:56:44 marin_dimitrov
193 * v0.4.0
194 *
195 * Revision 1.2 2005/05/11 14:02:03 marin
196 * formatting
197 *
198 * Revision 1.1.1.1 2005/05/10 15:12:12 marin
199 * no message
200 *
201 * Revision 1.2 2004/12/11 11:15:43 marin_dimitrov
202 * formatting:
203 * 1. indent is 4 spaces
204 * 2. line break indent is 8 spaces
205 * 3. no tabs
206 *
207 * Revision 1.1 2004/11/30 13:21:22 marin_dimitrov
208 * parser stuff moved from org.wsmo.io --> org.wsmo.io.parser
209 *
210 * Revision 1.2 2004/11/29 16:19:34 damyan_rm
211 * non-default public constructor added
212 *
213 * Revision 1.1 2004/11/26 11:26:10 marin_dimitrov
214 * Parser::parse now throws ParserException and InvalidModelException
215 */