001/* 002 * Copyright (c) 2005 Einar Pehrson <einar@pehrson.nu>. 003 * 004 * This file is part of 005 * CleanSheets - a spreadsheet application for the Java platform. 006 * 007 * CleanSheets is free software; you can redistribute it and/or modify 008 * it under the terms of the GNU General Public License as published by 009 * the Free Software Foundation; either version 2 of the License, or 010 * (at your option) any later version. 011 * 012 * CleanSheets is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 015 * GNU General Public License for more details. 016 * 017 * You should have received a copy of the GNU General Public License 018 * along with CleanSheets; if not, write to the Free Software 019 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 020 */ 021package csheets.core.formula.compiler; 022 023import csheets.core.formula.Expression; 024import csheets.core.formula.Function; 025import csheets.core.formula.FunctionParameter; 026 027/** 028 * An exception that is thrown if an function call with illegal argument count 029 * or argument types is encountered during parsing. 030 * @author Einar Pehrson 031 */ 032public class IllegalFunctionCallException extends FormulaCompilationException { 033 034 /** The serialVersionUID of the IllegalFunctionCallException.java */ 035 private static final long serialVersionUID = 1960534028676316836L; 036 037 /** The function call */ 038 private Function function; 039 040 /** The parameter that was not matched */ 041 private FunctionParameter parameter; 042 043 /** The argument that failed to match */ 044 private Expression argument; 045 046 /** 047 * Creates a new function call exception. 048 * @param function the function that was called 049 * @param parameter the parameter that was not matched 050 * @param argument the argument that failed to match 051 */ 052 public IllegalFunctionCallException(Function function, 053 FunctionParameter parameter, Expression argument) { 054 this.function = function; 055 this.parameter = parameter; 056 this.argument = argument; 057 } 058 059 /** 060 * Returns the function that was called. 061 * @return the function that was called 062 */ 063 public Function getFunction() { 064 return function; 065 } 066 067 /** 068 * Returns the parameter that was not matched. 069 * @return the parameter that was not matched 070 */ 071 public FunctionParameter getParameter() { 072 return parameter; 073 } 074 075 /** 076 * Returns the argument that failed to match. 077 * @return the argument that failed to match 078 */ 079 public Expression getArgument() { 080 return argument; 081 } 082 083 /** 084 * Returns a message describing the exception. 085 * @return a message describing the exception 086 */ 087 public String getMessage() { 088 String s = "Illegal function call: "; 089 if (parameter == null) 090 s += "too many arguments (" + argument + " did not match)."; 091 else if (argument == null) 092 s += "missing argument " + parameter.getName() + "."; 093 return s; 094 } 095 096 /** 097 * Returns a string representation of the exception. 098 * @return a string representation of the exception 099 */ 100 public String toString() { 101 return getMessage(); 102 } 103}