]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/formula/CountifFormulaFunction.java
Adopt spreadsheet changes made in Balas development
[simantics/platform.git] / bundles / org.simantics.spreadsheet / src / org / simantics / spreadsheet / solver / formula / CountifFormulaFunction.java
1 package org.simantics.spreadsheet.solver.formula;
2
3 import org.simantics.spreadsheet.SpreadsheetMatrix;
4 import org.simantics.spreadsheet.Spreadsheets;
5 import org.simantics.spreadsheet.solver.formula.parser.ast.AstArgList;
6 import org.simantics.spreadsheet.solver.formula.parser.ast.AstRange;
7
8 public class CountifFormulaFunction implements CellFormulaFunction<Integer> {
9
10     @Override
11     public Integer evaluate(CellValueVisitor visitor, AstArgList args) {
12         if (args.values.size() != 2) throw new IllegalStateException();
13
14         AstRange range = (AstRange) args.values.get(0);
15         SpreadsheetMatrix matrix = (SpreadsheetMatrix) range.accept(visitor);
16         Object crit = null;
17         try {
18             crit = args.values.get(1).accept(visitor);
19         } catch (IllegalStateException e){
20             return 0;
21         }
22
23         String criteria = Spreadsheets.asString(crit);
24         int result = 0;
25         for (Object value : matrix.values) {
26             if (Spreadsheets.matchCriteria(value, criteria))
27                 result++;
28         }
29         return Integer.valueOf(result);
30     }
31 }