X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.spreadsheet%2Fsrc%2Forg%2Fsimantics%2Fspreadsheet%2Fsolver%2Fformula%2FSpreadsheetEvaluationEnvironment.java;fp=bundles%2Forg.simantics.spreadsheet%2Fsrc%2Forg%2Fsimantics%2Fspreadsheet%2Fsolver%2Fformula%2FSpreadsheetEvaluationEnvironment.java;h=e3d3f18f76b47409f6feae279f48ac8cb494246d;hb=5c67a96d34fe904b8c4b0375cd08ff1d543bf369;hp=0000000000000000000000000000000000000000;hpb=9a37dabc6c0212ed3e14499c88df3208cd06f9b0;p=simantics%2Fplatform.git 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 index 000000000..e3d3f18f7 --- /dev/null +++ b/bundles/org.simantics.spreadsheet/src/org/simantics/spreadsheet/solver/formula/SpreadsheetEvaluationEnvironment.java @@ -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> 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 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; + } +}