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}