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.lang; 022 023import csheets.core.IllegalValueTypeException; 024import csheets.core.Value; 025import csheets.core.formula.Expression; 026import csheets.core.formula.Function; 027import csheets.core.formula.FunctionParameter; 028 029/** 030 * A function that emulates the if-then-else statement. 031 * @author Einar Pehrson 032 */ 033public 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}