1. /*
  2. * Copyright 2001-2004 The Apache Software Foundation.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. /*
  17. * $Id: ErrorMsg.java,v 1.25 2004/02/24 03:55:48 zongaro Exp $
  18. */
  19. package com.sun.org.apache.xalan.internal.xsltc.compiler.util;
  20. import java.text.MessageFormat;
  21. import java.util.Locale;
  22. import java.util.ResourceBundle;
  23. import com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet;
  24. import com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode;
  25. /**
  26. * @author Jacek Ambroziak
  27. * @author Santiago Pericas-Geertsen
  28. * @author G. Todd Miller
  29. * @author Erwin Bolwidt <ejb@klomp.org>
  30. * @author Morten Jorgensen
  31. */
  32. public final class ErrorMsg {
  33. private String _code;
  34. private int _line;
  35. private String _message = null;
  36. private String _url = null;
  37. Object[] _params = null;
  38. // Compiler error messages
  39. public static final String MULTIPLE_STYLESHEET_ERR = "MULTIPLE_STYLESHEET_ERR";
  40. public static final String TEMPLATE_REDEF_ERR = "TEMPLATE_REDEF_ERR";
  41. public static final String TEMPLATE_UNDEF_ERR = "TEMPLATE_UNDEF_ERR";
  42. public static final String VARIABLE_REDEF_ERR = "VARIABLE_REDEF_ERR";
  43. public static final String VARIABLE_UNDEF_ERR = "VARIABLE_UNDEF_ERR";
  44. public static final String CLASS_NOT_FOUND_ERR = "CLASS_NOT_FOUND_ERR";
  45. public static final String METHOD_NOT_FOUND_ERR = "METHOD_NOT_FOUND_ERR";
  46. public static final String ARGUMENT_CONVERSION_ERR = "ARGUMENT_CONVERSION_ERR";
  47. public static final String FILE_NOT_FOUND_ERR = "FILE_NOT_FOUND_ERR";
  48. public static final String INVALID_URI_ERR = "INVALID_URI_ERR";
  49. public static final String FILE_ACCESS_ERR = "FILE_ACCESS_ERR";
  50. public static final String MISSING_ROOT_ERR = "MISSING_ROOT_ERR";
  51. public static final String NAMESPACE_UNDEF_ERR = "NAMESPACE_UNDEF_ERR";
  52. public static final String FUNCTION_RESOLVE_ERR = "FUNCTION_RESOLVE_ERR";
  53. public static final String NEED_LITERAL_ERR = "NEED_LITERAL_ERR";
  54. public static final String XPATH_PARSER_ERR = "XPATH_PARSER_ERR";
  55. public static final String REQUIRED_ATTR_ERR = "REQUIRED_ATTR_ERR";
  56. public static final String ILLEGAL_CHAR_ERR = "ILLEGAL_CHAR_ERR";
  57. public static final String ILLEGAL_PI_ERR = "ILLEGAL_PI_ERR";
  58. public static final String STRAY_ATTRIBUTE_ERR = "STRAY_ATTRIBUTE_ERR";
  59. public static final String ILLEGAL_ATTRIBUTE_ERR = "ILLEGAL_ATTRIBUTE_ERR";
  60. public static final String CIRCULAR_INCLUDE_ERR = "CIRCULAR_INCLUDE_ERR";
  61. public static final String RESULT_TREE_SORT_ERR = "RESULT_TREE_SORT_ERR";
  62. public static final String SYMBOLS_REDEF_ERR = "SYMBOLS_REDEF_ERR";
  63. public static final String XSL_VERSION_ERR = "XSL_VERSION_ERR";
  64. public static final String CIRCULAR_VARIABLE_ERR = "CIRCULAR_VARIABLE_ERR";
  65. public static final String ILLEGAL_BINARY_OP_ERR = "ILLEGAL_BINARY_OP_ERR";
  66. public static final String ILLEGAL_ARG_ERR = "ILLEGAL_ARG_ERR";
  67. public static final String DOCUMENT_ARG_ERR = "DOCUMENT_ARG_ERR";
  68. public static final String MISSING_WHEN_ERR = "MISSING_WHEN_ERR";
  69. public static final String MULTIPLE_OTHERWISE_ERR = "MULTIPLE_OTHERWISE_ERR";
  70. public static final String STRAY_OTHERWISE_ERR = "STRAY_OTHERWISE_ERR";
  71. public static final String STRAY_WHEN_ERR = "STRAY_WHEN_ERR";
  72. public static final String WHEN_ELEMENT_ERR = "WHEN_ELEMENT_ERR";
  73. public static final String UNNAMED_ATTRIBSET_ERR = "UNNAMED_ATTRIBSET_ERR";
  74. public static final String ILLEGAL_CHILD_ERR = "ILLEGAL_CHILD_ERR";
  75. public static final String ILLEGAL_ELEM_NAME_ERR = "ILLEGAL_ELEM_NAME_ERR";
  76. public static final String ILLEGAL_ATTR_NAME_ERR = "ILLEGAL_ATTR_NAME_ERR";
  77. public static final String ILLEGAL_TEXT_NODE_ERR = "ILLEGAL_TEXT_NODE_ERR";
  78. public static final String SAX_PARSER_CONFIG_ERR = "SAX_PARSER_CONFIG_ERR";
  79. public static final String INTERNAL_ERR = "INTERNAL_ERR";
  80. public static final String UNSUPPORTED_XSL_ERR = "UNSUPPORTED_XSL_ERR";
  81. public static final String UNSUPPORTED_EXT_ERR = "UNSUPPORTED_EXT_ERR";
  82. public static final String MISSING_XSLT_URI_ERR = "MISSING_XSLT_URI_ERR";
  83. public static final String MISSING_XSLT_TARGET_ERR = "MISSING_XSLT_TARGET_ERR";
  84. public static final String NOT_IMPLEMENTED_ERR = "NOT_IMPLEMENTED_ERR";
  85. public static final String NOT_STYLESHEET_ERR = "NOT_STYLESHEET_ERR";
  86. public static final String ELEMENT_PARSE_ERR = "ELEMENT_PARSE_ERR";
  87. public static final String KEY_USE_ATTR_ERR = "KEY_USE_ATTR_ERR";
  88. public static final String OUTPUT_VERSION_ERR = "OUTPUT_VERSION_ERR";
  89. public static final String ILLEGAL_RELAT_OP_ERR = "ILLEGAL_RELAT_OP_ERR";
  90. public static final String ATTRIBSET_UNDEF_ERR = "ATTRIBSET_UNDEF_ERR";
  91. public static final String ATTR_VAL_TEMPLATE_ERR = "ATTR_VAL_TEMPLATE_ERR";
  92. public static final String UNKNOWN_SIG_TYPE_ERR = "UNKNOWN_SIG_TYPE_ERR";
  93. public static final String DATA_CONVERSION_ERR = "DATA_CONVERSION_ERR";
  94. // JAXP/TrAX error messages
  95. public static final String NO_TRANSLET_CLASS_ERR = "NO_TRANSLET_CLASS_ERR";
  96. public static final String NO_MAIN_TRANSLET_ERR = "NO_MAIN_TRANSLET_ERR";
  97. public static final String TRANSLET_CLASS_ERR = "TRANSLET_CLASS_ERR";
  98. public static final String TRANSLET_OBJECT_ERR = "TRANSLET_OBJECT_ERR";
  99. public static final String ERROR_LISTENER_NULL_ERR = "ERROR_LISTENER_NULL_ERR";
  100. public static final String JAXP_UNKNOWN_SOURCE_ERR = "JAXP_UNKNOWN_SOURCE_ERR";
  101. public static final String JAXP_NO_SOURCE_ERR = "JAXP_NO_SOURCE_ERR";
  102. public static final String JAXP_COMPILE_ERR = "JAXP_COMPILE_ERR";
  103. public static final String JAXP_INVALID_ATTR_ERR = "JAXP_INVALID_ATTR_ERR";
  104. public static final String JAXP_SET_RESULT_ERR = "JAXP_SET_RESULT_ERR";
  105. public static final String JAXP_NO_TRANSLET_ERR = "JAXP_NO_TRANSLET_ERR";
  106. public static final String JAXP_NO_HANDLER_ERR = "JAXP_NO_HANDLER_ERR";
  107. public static final String JAXP_NO_RESULT_ERR = "JAXP_NO_RESULT_ERR";
  108. public static final String JAXP_UNKNOWN_PROP_ERR = "JAXP_UNKNOWN_PROP_ERR";
  109. public static final String SAX2DOM_ADAPTER_ERR = "SAX2DOM_ADAPTER_ERR";
  110. public static final String XSLTC_SOURCE_ERR = "XSLTC_SOURCE_ERR";
  111. public static final String ER_RESULT_NULL = "ER_RESULT_NULL";
  112. public static final String JAXP_INVALID_SET_PARAM_VALUE = "JAXP_INVALID_SET_PARAM_VALUE";
  113. // Command-line error messages
  114. public static final String COMPILE_STDIN_ERR = "COMPILE_STDIN_ERR";
  115. public static final String COMPILE_USAGE_STR = "COMPILE_USAGE_STR";
  116. public static final String TRANSFORM_USAGE_STR = "TRANSFORM_USAGE_STR";
  117. // Recently added error messages
  118. public static final String STRAY_SORT_ERR = "STRAY_SORT_ERR";
  119. public static final String UNSUPPORTED_ENCODING = "UNSUPPORTED_ENCODING";
  120. public static final String SYNTAX_ERR = "SYNTAX_ERR";
  121. public static final String CONSTRUCTOR_NOT_FOUND = "CONSTRUCTOR_NOT_FOUND";
  122. public static final String NO_JAVA_FUNCT_THIS_REF = "NO_JAVA_FUNCT_THIS_REF";
  123. public static final String TYPE_CHECK_ERR = "TYPE_CHECK_ERR";
  124. public static final String TYPE_CHECK_UNK_LOC_ERR = "TYPE_CHECK_UNK_LOC_ERR";
  125. public static final String ILLEGAL_CMDLINE_OPTION_ERR = "ILLEGAL_CMDLINE_OPTION_ERR";
  126. public static final String CMDLINE_OPT_MISSING_ARG_ERR = "CMDLINE_OPT_MISSING_ARG_ERR";
  127. public static final String WARNING_PLUS_WRAPPED_MSG = "WARNING_PLUS_WRAPPED_MSG";
  128. public static final String WARNING_MSG = "WARNING_MSG";
  129. public static final String FATAL_ERR_PLUS_WRAPPED_MSG = "FATAL_ERR_PLUS_WRAPPED_MSG";
  130. public static final String FATAL_ERR_MSG = "FATAL_ERR_MSG";
  131. public static final String ERROR_PLUS_WRAPPED_MSG = "ERROR_PLUS_WRAPPED_MSG";
  132. public static final String ERROR_MSG = "ERROR_MSG";
  133. public static final String TRANSFORM_WITH_TRANSLET_STR = "TRANSFORM_WITH_TRANSLET_STR";
  134. public static final String TRANSFORM_WITH_JAR_STR = "TRANSFORM_WITH_JAR_STR";
  135. public static final String COULD_NOT_CREATE_TRANS_FACT = "COULD_NOT_CREATE_TRANS_FACT";
  136. public static final String TRANSLET_NAME_JAVA_CONFLICT =
  137. "TRANSLET_NAME_JAVA_CONFLICT";
  138. public static final String INVALID_QNAME_ERR = "INVALID_QNAME_ERR";
  139. public static final String INVALID_NCNAME_ERR = "INVALID_NCNAME_ERR";
  140. public static final String INVALID_METHOD_IN_OUTPUT = "INVALID_METHOD_IN_OUTPUT";
  141. // All error messages are localized and are stored in resource bundles.
  142. // This array and the following 4 strings are read from that bundle.
  143. private static ResourceBundle _bundle;
  144. public final static String ERROR_MESSAGES_KEY = "ERROR_MESSAGES_KEY";
  145. public final static String COMPILER_ERROR_KEY = "COMPILER_ERROR_KEY";
  146. public final static String COMPILER_WARNING_KEY = "COMPILER_WARNING_KEY";
  147. public final static String RUNTIME_ERROR_KEY = "RUNTIME_ERROR_KEY";
  148. static {
  149. _bundle = ResourceBundle.getBundle(
  150. "com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMessages",
  151. Locale.getDefault());
  152. }
  153. public ErrorMsg(String code) {
  154. _code = code;
  155. _line = 0;
  156. }
  157. public ErrorMsg(Throwable e) {
  158. _code = null;
  159. _message = e.getMessage();
  160. _line = 0;
  161. }
  162. public ErrorMsg(String message, int line) {
  163. _code = null;
  164. _message = message;
  165. _line = line;
  166. }
  167. public ErrorMsg(String code, int line, Object param) {
  168. _code = code;
  169. _line = line;
  170. _params = new Object[] { param };
  171. }
  172. public ErrorMsg(String code, Object param) {
  173. this(code);
  174. _params = new Object[1];
  175. _params[0] = param;
  176. }
  177. public ErrorMsg(String code, Object param1, Object param2) {
  178. this(code);
  179. _params = new Object[2];
  180. _params[0] = param1;
  181. _params[1] = param2;
  182. }
  183. public ErrorMsg(String code, SyntaxTreeNode node) {
  184. _code = code;
  185. _url = getFileName(node);
  186. _line = node.getLineNumber();
  187. }
  188. public ErrorMsg(String code, Object param1, SyntaxTreeNode node) {
  189. _code = code;
  190. _url = getFileName(node);
  191. _line = node.getLineNumber();
  192. _params = new Object[1];
  193. _params[0] = param1;
  194. }
  195. public ErrorMsg(String code, Object param1, Object param2,
  196. SyntaxTreeNode node) {
  197. _code = code;
  198. _url = getFileName(node);
  199. _line = node.getLineNumber();
  200. _params = new Object[2];
  201. _params[0] = param1;
  202. _params[1] = param2;
  203. }
  204. private String getFileName(SyntaxTreeNode node) {
  205. Stylesheet stylesheet = node.getStylesheet();
  206. if (stylesheet != null)
  207. return stylesheet.getSystemId();
  208. else
  209. return null;
  210. }
  211. private String formatLine() {
  212. StringBuffer result = new StringBuffer();
  213. if (_url != null) {
  214. result.append(_url);
  215. result.append(": ");
  216. }
  217. if (_line > 0) {
  218. result.append("line ");
  219. result.append(Integer.toString(_line));
  220. result.append(": ");
  221. }
  222. return result.toString();
  223. }
  224. /**
  225. * This version of toString() uses the _params instance variable
  226. * to format the message. If the <code>_code</code> is negative
  227. * the use _message as the error string.
  228. */
  229. public String toString() {
  230. String suffix = (_params == null) ?
  231. (null != _code ? new String(getErrorMessage()) : _message)
  232. : MessageFormat.format(getErrorMessage(), _params);
  233. return formatLine() + suffix;
  234. }
  235. public String toString(Object obj) {
  236. Object params[] = new Object[1];
  237. params[0] = obj.toString();
  238. String suffix = MessageFormat.format(getErrorMessage(), params);
  239. return formatLine() + suffix;
  240. }
  241. public String toString(Object obj0, Object obj1) {
  242. Object params[] = new Object[2];
  243. params[0] = obj0.toString();
  244. params[1] = obj1.toString();
  245. String suffix = MessageFormat.format(getErrorMessage(), params);
  246. return formatLine() + suffix;
  247. }
  248. /**
  249. * Return an ErrorMessages string corresponding to the _code
  250. * This function is temporary until the three special-cased keys
  251. * below are moved into ErrorMessages
  252. *
  253. * @return ErrorMessages string
  254. */
  255. private String getErrorMessage() {
  256. return _bundle.getString(_code);
  257. }
  258. }