1 package org.simantics.spreadsheet.graph.formula;
\r
3 import org.simantics.databoard.binding.mutable.Variant;
\r
4 import org.simantics.spreadsheet.graph.CellFormulaFunction;
\r
5 import org.simantics.spreadsheet.graph.CellValueVisitor;
\r
6 import org.simantics.spreadsheet.graph.SpreadsheetGraphUtils;
\r
7 import org.simantics.spreadsheet.graph.SpreadsheetMatrix;
\r
8 import org.simantics.spreadsheet.graph.parser.ast.AstArgList;
\r
9 import org.simantics.spreadsheet.graph.parser.ast.AstValue;
\r
11 public class AverageFormulaFunction implements CellFormulaFunction<Object> {
\r
14 public Object evaluate(CellValueVisitor visitor, AstArgList args) {
\r
15 if (args.values.size() == 0)
\r
16 throw new IllegalStateException();
\r
19 for(AstValue value : args.values){
\r
20 Object res = value.accept(visitor);
\r
21 if (res instanceof SpreadsheetMatrix) {
\r
22 Object value2 = ((SpreadsheetMatrix) res).sumWithFormulaError();
\r
23 if(value2 instanceof String) return value2;
\r
25 sum += ((Number)value2).doubleValue();
\r
26 count += ((SpreadsheetMatrix) res).countOfActualDoubleValues();
\r
28 FormulaError2 err = FormulaError2.forObject(res);
\r
29 if(err!=null) return err.getString();
\r
31 if(res instanceof Variant){
\r
32 Double dVal = SpreadsheetGraphUtils.asDoubleWhereEmptyStringIsZero(res);
\r
33 if(dVal==null) res = ((Variant)res).toString();
\r
38 if(res instanceof String && !res.equals("")){
\r
39 v = SpreadsheetGraphUtils.asDoubleWhereEmptyStringIsZero(res);
\r
41 else if(res instanceof Number)
\r
42 v = SpreadsheetGraphUtils.asDoubleWhereEmptyStringIsZero(res);
\r
50 if(count==0.0) return FormulaError2.DIV0.getString();
\r