public final class Calculator extends java.lang.Object implements CalculatorProvider, java.io.Serializable, java.lang.Cloneable
限定符和类型 | 类和说明 |
---|---|
protected static class |
Calculator.NameSpaceChain |
限定符和类型 | 字段和说明 |
---|---|
static CalculatorKey |
SHEET_NUMBER_KEY |
CONTEXT_PATH, ENV_HOME, FORMLET_NAME, FR_HOME, PROJECTNAME, REMOTE_SERVLET_URL, REPORT_NAME, SERVER_NAME, SERVER_PORT, SERVER_SCHEMA, SERVER_URL, SERVLET_URL, SESSION_HEART_BEAT, SESSION_ID
限定符和类型 | 方法和说明 |
---|---|
static void |
clearThreadSavedParameter()
清楚所有的保存的线程信息
|
static Calculator |
createCalculator()
alex:返回当前线程正在用的Calculator
一个线程只用一个Calculator,至少线程内的环境在这个Calculator里面共享
不知道会不会有问题,会不会有可能只需要局部的Calculator
|
java.lang.Object |
eval(FormulaProvider obj)
计算给定的公式的值
计算一个公式得到结果:
Calculator ca = Calculator.createCalculator();
System.out.println(ca.eval(new Formula("1 + 2 * 3")));
|
java.lang.Object |
eval(Node obj)
计算给定的函数节点的值
|
java.lang.Object |
eval(java.lang.String obj)
根据obj的类型判断计算方式
如果是单元格,默认计算出来就是单元格,不会取值
|
java.lang.Object |
evalAuth() |
java.lang.Object |
evalValue(FormulaProvider obj)
计算给定公式的结果并使用转换器转换结算结果
|
java.lang.Object |
evalValue(Node obj)
计算给定的函数节点并使用转换器转换结算结果
|
java.lang.Object |
evalValue(java.lang.String obj)
计算给定表达式的结果并使用转换器转换结算结果
|
java.lang.String |
exStatement(ColumnRow currentColumnRow,
java.lang.String statement)
解析表达式
|
<T> T |
getAttribute(CalculatorKey key)
根据指定的属性名获取保存在算子中的属性值
|
<T> T |
getAttribute(java.lang.Class clazz) |
java.sql.Connection |
getConnection(java.lang.String name) |
ColumnRow |
getCurrentColumnRow()
获取在计算中正在使用的格子
|
ColumnRow |
getCurrentFromColumnRow()
已过时。
|
CalculateLocator |
getLocator()
获取计算坐标系
|
java.util.LinkedList |
getNameSpaceList() |
static NameSpace |
getSavedSessionNameSpace() |
static java.util.Map<java.lang.String,java.lang.Object> |
getSavedVariables() |
java.lang.String |
onAddDeleteColumnOrRow(java.lang.String statement,
int rowIndex,
int rowChanged,
int columnIndex,
int colChanged)
alex: 当行列添加时
|
Expression |
parse(java.lang.Object o)
将一个对象解析成函数表达式
|
Expression |
parse(java.lang.String statement)
将字符串解析成函数表达式
|
static ParameterProvider[] |
processParameters(CalculatorProvider calculator,
ParameterProvider[] parameters)
处理参数,将参数值中的公式使用算子做解析得出结果
|
void |
pushNameSpace(NameSpace ns)
将一个名字空间添加到全局名字空间链的头部
添加名字空间(参数名字空间),并根据他计算出结果的例子,计算结果是5:
Calculator ca = Calculator.createCalculator();
Map map = new HashMap();
map.put("p1", 2);
ParameterMapNameSpace space = ParameterMapNameSpace.create(map);
ca.pushNameSpace(space);
System.out.println(ca.eval(new Formula("$p1 + 3")));
|
void |
putConnection(java.lang.String name,
java.sql.Connection conn)
添加连接
|
static void |
putThreadSavedNameSpace(NameSpace ns)
添加线程NameSpace
|
static ColumnRowRange[] |
relatedColumnRowRangeArray(java.lang.String statement)
解析表达式中相关的扩展格子
下面的返回结果是A1行列和C1行列:
Calculator.createCalculator().relatedColumnRowRangeArray("left(A1,2) + 'B1' + C1");
|
static java.lang.String[] |
relatedParameters(java.lang.String statement)
解析给定的表达式中相关的参数
下面的返回结果是"$C1"这个参数名:
Calculator.createCalculator().relatedParameters("left(A1,2) + 'B1' + $C1");
|
void |
remove(java.lang.String name)
在全局名字空间中移除一个值
|
void |
removeAttribute(CalculatorKey key)
移除指定的属性
|
void |
removeConnection(java.lang.String name)
移除连接
|
boolean |
removeNameSpace(NameSpace ns)
从全局名字空间链上移除一个指定的名字空间
|
Function |
resolveMethod(java.lang.Object var)
将表达式转化为一个函数并返回
|
java.lang.Object |
resolveRelateCellElements(ColumnRow cr)
获取指定单元格的关联格子
|
java.lang.Object |
resolveVariable(java.lang.Object var)
将给定的表达式计算出结果
|
java.lang.Object |
resolveVariableInCE(java.lang.Object var)
在单元格范畴内计算表达式的值
|
void |
set(java.lang.String name,
java.lang.Object value)
在全局名字空间中添加一个键值对
|
void |
setAttribute(CalculatorKey key,
java.lang.Object attribute)
添加一个键值对到算子的属性表中
属性不用于计算,添加属性的例子:
StableFactory.registerDefaultNameSpace(DefaultNameSpace.getInstance());
Calculator ca = Calculator.createCalculator();
ca.setAttribute("p1", 2);
ca.getAttribute("p1"); //结果是2
ca.eval(new Formula("$p1 + 3")); //结果是3
|
void |
setAttribute(java.lang.Class clazz,
java.lang.Object attribute)
已过时。
|
void |
setCurrentColumnRow(ColumnRow columnRow)
已过时。
|
void |
setCurrentFromColumnRow(ColumnRow cr)
已过时。
|
static void |
setThreadSavedParameter(java.lang.String name,
java.lang.Object ob)
保存环境变量于ThreadContext
|
public static final CalculatorKey SHEET_NUMBER_KEY
public static Calculator createCalculator()
public static void putThreadSavedNameSpace(NameSpace ns)
ns
- 添加的NameSpacepublic static void setThreadSavedParameter(java.lang.String name, java.lang.Object ob)
name
- 环境变量名称ob
- 环境变量对象public static void clearThreadSavedParameter()
public static java.util.Map<java.lang.String,java.lang.Object> getSavedVariables()
public static NameSpace getSavedSessionNameSpace()
public static ParameterProvider[] processParameters(CalculatorProvider calculator, ParameterProvider[] parameters)
calculator
- 算子parameters
- 原始参数public void setAttribute(CalculatorKey key, java.lang.Object attribute)
属性不用于计算,添加属性的例子: StableFactory.registerDefaultNameSpace(DefaultNameSpace.getInstance()); Calculator ca = Calculator.createCalculator(); ca.setAttribute("p1", 2); ca.getAttribute("p1"); //结果是2 ca.eval(new Formula("$p1 + 3")); //结果是3
setAttribute
在接口中 CalculatorProvider
key
- 属性名attribute
- 属性值@Deprecated public void setAttribute(java.lang.Class clazz, java.lang.Object attribute)
setAttribute
在接口中 CalculatorProvider
public <T> T getAttribute(java.lang.Class clazz)
getAttribute
在接口中 CalculatorProvider
public <T> T getAttribute(CalculatorKey key)
getAttribute
在接口中 Context
key
- 属性名public void removeAttribute(CalculatorKey key)
removeAttribute
在接口中 CalculatorProvider
key
- 要移除的属性对应的属性名public void set(java.lang.String name, java.lang.Object value)
set
在接口中 CalculatorProvider
name
- 名字value
- 值public void remove(java.lang.String name)
remove
在接口中 CalculatorProvider
name
- 要移除的值的名字public void pushNameSpace(NameSpace ns)
添加名字空间(参数名字空间),并根据他计算出结果的例子,计算结果是5:
Calculator ca = Calculator.createCalculator(); Map map = new HashMap(); map.put("p1", 2); ParameterMapNameSpace space = ParameterMapNameSpace.create(map); ca.pushNameSpace(space); System.out.println(ca.eval(new Formula("$p1 + 3")));
pushNameSpace
在接口中 CalculatorProvider
ns
- 名字空间public boolean removeNameSpace(NameSpace ns)
removeNameSpace
在接口中 CalculatorProvider
ns
- 要移除的名字空间public java.lang.Object resolveVariable(java.lang.Object var)
resolveVariable
在接口中 CalculatorProvider
var
- 要计算的表达式public java.lang.Object resolveVariableInCE(java.lang.Object var)
resolveVariableInCE
在接口中 CalculatorProvider
var
- 表达式public Function resolveMethod(java.lang.Object var)
resolveMethod
在接口中 CalculatorProvider
var
- 表达式@Deprecated public void setCurrentFromColumnRow(ColumnRow cr)
CalculatorProvider
setCurrentFromColumnRow
在接口中 CalculatorProvider
@Deprecated public ColumnRow getCurrentFromColumnRow()
getCurrentFromColumnRow
在接口中 CalculatorProvider
public java.lang.Object resolveRelateCellElements(ColumnRow cr)
resolveRelateCellElements
在接口中 CalculatorProvider
cr
- 表示单元格的行列对象public Expression parse(java.lang.Object o) throws com.fr.third.antlr.ANTLRException
parse
在接口中 CalculatorProvider
o
- 一般对象com.fr.third.antlr.ANTLRException
- 如果给定的对象无法正确的解析成函数表达式则抛出此异常public Expression parse(java.lang.String statement) throws com.fr.third.antlr.ANTLRException
parse
在接口中 CalculatorProvider
statement
- 待解析的字符串com.fr.third.antlr.ANTLRException
- 如果给定的字符串无法正确的解析成函数表达式则抛出此异常public java.lang.Object evalValue(java.lang.String obj) throws UtilEvalError
evalValue
在接口中 CalculatorProvider
obj
- 表达式UtilEvalError
- 如果表达式无法解析则抛出此异常public java.lang.Object evalValue(FormulaProvider obj) throws UtilEvalError
evalValue
在接口中 CalculatorProvider
obj
- 公式UtilEvalError
- 如果公式无法正确解析则抛出此异常public java.lang.Object evalValue(Node obj) throws UtilEvalError
evalValue
在接口中 CalculatorProvider
obj
- 函数节点UtilEvalError
- 如果无法正确解析该函数节点则抛出此异常public java.lang.Object eval(java.lang.String obj) throws UtilEvalError
eval
在接口中 CalculatorProvider
obj
- 待计算的字符串UtilEvalError
public java.lang.Object evalAuth()
public java.lang.Object eval(FormulaProvider obj) throws UtilEvalError
计算一个公式得到结果:
Calculator ca = Calculator.createCalculator(); System.out.println(ca.eval(new Formula("1 + 2 * 3")));
eval
在接口中 CalculatorProvider
obj
- 公式UtilEvalError
public java.lang.Object eval(Node obj) throws UtilEvalError
eval
在接口中 CalculatorProvider
obj
- 函数节点UtilEvalError
public static ColumnRowRange[] relatedColumnRowRangeArray(java.lang.String statement) throws com.fr.third.antlr.ANTLRException
下面的返回结果是A1行列和C1行列:
Calculator.createCalculator().relatedColumnRowRangeArray("left(A1,2) + 'B1' + C1");
statement
- 给定的表达式com.fr.third.antlr.ANTLRException
public static java.lang.String[] relatedParameters(java.lang.String statement) throws com.fr.third.antlr.ANTLRException
下面的返回结果是"$C1"这个参数名:
Calculator.createCalculator().relatedParameters("left(A1,2) + 'B1' + $C1");
statement
- 需要解析的表达式com.fr.third.antlr.ANTLRException
public void putConnection(java.lang.String name, java.sql.Connection conn)
name
- 连接名称conn
- 连接public java.sql.Connection getConnection(java.lang.String name)
public void removeConnection(java.lang.String name)
name
- 连接名public java.lang.String exStatement(ColumnRow currentColumnRow, java.lang.String statement)
exStatement
在接口中 CalculatorProvider
currentColumnRow
- 当前行列statement
- 要执行的语句public CalculateLocator getLocator()
CalculatorProvider
getLocator
在接口中 CalculatorProvider
public ColumnRow getCurrentColumnRow()
CalculatorProvider
getCurrentColumnRow
在接口中 CalculatorProvider
@Deprecated public void setCurrentColumnRow(ColumnRow columnRow)
setCurrentColumnRow
在接口中 CalculatorProvider
public java.lang.String onAddDeleteColumnOrRow(java.lang.String statement, int rowIndex, int rowChanged, int columnIndex, int colChanged)
statement
- 表达式rowIndex
- 行序号rowChanged
- 行改变columnIndex
- 列序号colChanged
- 列改变public java.util.LinkedList getNameSpaceList()