1 package org.simantics.spreadsheet.graph.formula;
\r
3 import org.simantics.spreadsheet.graph.CellFormulaFunction;
\r
4 import org.simantics.spreadsheet.graph.CellValueVisitor;
\r
5 import org.simantics.spreadsheet.graph.SpreadsheetGraphUtils;
\r
6 import org.simantics.spreadsheet.graph.parser.ast.AstArgList;
\r
7 import org.simantics.spreadsheet.graph.parser.ast.AstNothing;
\r
8 import org.simantics.spreadsheet.graph.parser.ast.AstValue;
\r
10 public class IfFormulaFunction implements CellFormulaFunction<Object> {
\r
13 public Object evaluate(CellValueVisitor visitor, AstArgList args) {
\r
14 if (args.values.size() != 3) throw new IllegalStateException();
\r
16 Object condition = args.values.get(0).accept(visitor);
\r
17 AstValue ifTrueResult = args.values.get(1);
\r
18 AstValue ifFalseResult = args.values.get(2);
\r
20 FormulaError2 error = FormulaError2.forObject(condition);
\r
21 if(error!=null) return error.getString();
\r
23 if (SpreadsheetGraphUtils.asBoolean(condition)) {
\r
24 if(ifTrueResult==null || ifTrueResult instanceof AstNothing)
\r
27 return ifTrueResult.accept(visitor);
\r
28 } catch (IllegalStateException e){
\r
29 return FormulaError2.NAME.getString();
\r
33 if(ifFalseResult==null || ifFalseResult instanceof AstNothing)
\r
36 return ifFalseResult.accept(visitor);
\r
37 } catch (IllegalStateException e){
\r
38 return FormulaError2.NAME.getString();
\r