]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/formula/SpreadsheetEvaluationEnvironment.java
Adopt spreadsheet changes made in Balas development
[simantics/platform.git] / bundles / org.simantics.spreadsheet / src / org / simantics / spreadsheet / solver / formula / SpreadsheetEvaluationEnvironment.java
diff --git a/bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/formula/SpreadsheetEvaluationEnvironment.java b/bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/formula/SpreadsheetEvaluationEnvironment.java
new file mode 100644 (file)
index 0000000..e3d3f18
--- /dev/null
@@ -0,0 +1,60 @@
+package org.simantics.spreadsheet.solver.formula;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.simantics.spreadsheet.solver.SpreadsheetBook;
+
+public class SpreadsheetEvaluationEnvironment {
+
+    final private SpreadsheetBook book;
+    private Map<String, CellFormulaFunction<?>> functions = new HashMap<>();
+    public int iterationLimit = 100;
+
+    public SpreadsheetEvaluationEnvironment(SpreadsheetBook book) {
+        this.book = book;
+
+        functions.put("MATCH", new MatchFormulaFunction());
+        functions.put("ISERROR",new IsErrorFormulaFunction());
+        functions.put("IFERROR",new IfErrorFormulaFunction());
+        functions.put("IF", new IfFormulaFunction());
+        functions.put("OR", new OrFormulaFunction());
+        functions.put("AND", new AndFormulaFunction());
+        functions.put("ROUND", new RoundFormulaFunction());
+        functions.put("ROUNDUP", new RoundupFormulaFunction());
+        functions.put("SQRT", new SqrtFormulaFunction());
+        functions.put("PI", new PiFormulaFunction());
+        functions.put("COUNTIF", new CountifFormulaFunction());
+        functions.put("SUM", new SumFormulaFunction());
+        functions.put("AVERAGE", new AverageFormulaFunction());
+        functions.put("SUMIF", new SumifFormulaFunction());
+        functions.put("VLOOKUP", new VlookupFormulaFunction());
+        functions.put("HLOOKUP", new HlookupFormulaFunction());
+        functions.put("TODAY", new TodayFormulaFunction());
+        functions.put("LINEST", new LinestFormulaFunction());
+        functions.put("GEOMEAN", new GeomeanFormulaFunction());
+    }
+
+    public CellFormulaFunction<?> getFunction(String name) {
+        return functions.get(name);
+    }
+
+    public SpreadsheetBook getBook() {
+        return book;
+    }
+
+    private static Map<SpreadsheetBook, SpreadsheetEvaluationEnvironment> INSTANCES = new HashMap<>();
+
+    public static SpreadsheetEvaluationEnvironment getInstance(SpreadsheetBook book) {
+        SpreadsheetEvaluationEnvironment env = INSTANCES.get(book);
+        if (env == null) {
+            env = new SpreadsheetEvaluationEnvironment(book);
+            INSTANCES.put(book, env);
+        }
+        return env;
+    }
+
+    public static boolean removeInstance(SpreadsheetBook book) {
+        return INSTANCES.remove(book) != null;
+    }
+}