/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.cocoon.components.flow.javascript; import org.mozilla.javascript.ErrorReporter; import org.mozilla.javascript.EvaluatorException; import org.mozilla.javascript.tools.ToolErrorReporter; import org.apache.avalon.framework.logger.Logger; /** * Implements a Rhino JavaScript {@link * org.mozilla.javascript.ErrorReporter}. * Like ToolErrorReporter but logs to supplied logger instead of stdout * * @version CVS $Id$ */ public class JSErrorReporter implements ErrorReporter { private Logger logger; public JSErrorReporter(Logger logger) { this.logger = logger; } public void error(String message, String sourceName, int line, String lineSrc, int column) { String errMsg = getErrorMessage("msg.error", message, sourceName, line, lineSrc, column); System.err.println(errMsg); logger.error(errMsg); } public void warning(String message, String sourceName, int line, String lineSrc, int column) { String errMsg = getErrorMessage("msg.warning", message, sourceName, line, lineSrc, column); System.err.println(errMsg); logger.warn(errMsg); } public EvaluatorException runtimeError(String message, String sourceName, int line, String lineSrc, int column) { String errMsg = getErrorMessage("msg.error", message, sourceName, line, lineSrc, column); System.err.println(errMsg); return new EvaluatorException(errMsg); } /** * Formats error message * * @param type a <code>String</code> value, indicating the error * type (error or warning) * @param message a <code>String</code> value, the error or warning * message * @param line an <code>int</code> value, the original cummulative * line number * @param lineSource a <code>String</code> value, the text of the * line in the file * @param column an <code>int</code> value, the column in * <code>lineSource</code> where the error appeared * @return a <code>String</code> value, the aggregated error * message, with the source file and line number adjusted to the * real values */ String getErrorMessage(String type, String message, String sourceName, int line, String lineSource, int column) { if (line > 0) { if (sourceName != null) { Object[] errArgs = { sourceName, new Integer(line), message }; return ToolErrorReporter.getMessage("msg.format3", errArgs); } else { Object[] errArgs = { new Integer(line), message }; return ToolErrorReporter.getMessage("msg.format2", errArgs); } } else { Object[] errArgs = { message }; return ToolErrorReporter.getMessage("msg.format1", errArgs); } } }