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.SpreadsheetMatrix;
\r
7 import org.simantics.spreadsheet.graph.parser.ast.AstArgList;
\r
8 import org.simantics.spreadsheet.graph.parser.ast.AstValue;
\r
10 class SumFormulaFunction implements CellFormulaFunction<Object> {
\r
13 public Object evaluate(CellValueVisitor visitor, AstArgList args) {
\r
15 for (AstValue value : args.values) {
\r
16 Object result = value.accept(visitor);
\r
18 if (result instanceof SpreadsheetMatrix) {
\r
19 Object value2 = ((SpreadsheetMatrix) result).sumWithFormulaError();
\r
20 if(value2 instanceof String) return value2; //means sumWithFormulaError returned an Error message.
\r
21 sum += ((Number)value2).doubleValue();
\r
22 } else if(result instanceof String && !result.equals("")){
\r
23 FormulaError2 error = FormulaError2.forString(result.toString());
\r
24 if(error!=null) return error.getString();
\r
25 Double v = SpreadsheetGraphUtils.asDoubleWhereEmptyStringIsZero(result);
\r
28 } else if(result instanceof Number){
\r
29 sum += ((Number)result).doubleValue();
\r
31 sum += SpreadsheetGraphUtils.asNumber(result);
\r