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 */
021 package csheets.core.formula.lang;
022
023 import csheets.core.IllegalValueTypeException;
024 import csheets.core.Value;
025 import csheets.core.formula.Expression;
026 import csheets.core.formula.Function;
027 import csheets.core.formula.FunctionParameter;
028
029 /**
030 * A function that emulates the if-then-else statement.
031 * @author Einar Pehrson
032 */
033 public class If implements Function {
034
035 /** The function's three parameters: condition, result and alternative */
036 public static final FunctionParameter[] parameters = new FunctionParameter[] {
037 new FunctionParameter(Value.Type.BOOLEAN, "Condition", false,
038 "A condition to evaluate before proceeding"),
039 new FunctionParameter(Value.Type.UNDEFINED, "Then", false,
040 "A value to return if the condition was met"),
041 new FunctionParameter(Value.Type.UNDEFINED, "Else", true,
042 "A value to return otherwise")
043 };
044
045 /**
046 * Creates a new instance of the IF function.
047 */
048 public If() {}
049
050 public String getIdentifier() {
051 return "IF";
052 }
053
054 public Value applyTo(Expression[] arguments) throws IllegalValueTypeException {
055 if (arguments[0].evaluate().toBoolean())
056 return arguments[1].evaluate();
057 else if (arguments.length == 3)
058 return arguments[2].evaluate();
059 else
060 return new Value();
061 }
062
063 public FunctionParameter[] getParameters() {
064 return parameters;
065 }
066
067 public boolean isVarArg() {
068 return false;
069 }
070 }