All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.anysoft.formula.DataProvider Maven / Gradle / Ivy

There is a newer version: 1.6.17
Show newest version
package com.anysoft.formula;


/**
 * Data provider
 * 
 * 
* DataProvider 用于在公式计算时提供变量值。
* * ### 上下文的使用
* * 在某些场合使用上下文,可以显著地提升处理效率。
* * 例如:现需要对一个关系表进行扫描计算,关系表的Column即为变量,在公式定义中是用列名来作为变量。 * 传统的思路是:先由列名找到列索引(定义为A),再由列索引找到列值(定义为B), * 如果有n行记录,计算的次数将是(A+B)*n。
* * 进一步分析发现,对于所有行的计算,A是不变的,因此就有了上下文的设计。 * 计算框架调用一次{@link #getContext(String)}获取上下文,再多次调用{@link #getValue(String, Object,String)}, * 这样提升了效率,总的计算次数是A + B*n。
* * @author duanyy * @version 1.0.0 * @version 1.0.1 * + {@link DataProvider#getValue(String, Object, String) getValue}函数的返回类型修改为String * + {@link DataProvider#getValue(String, Object, String) getValue}函数增加缺省值参数 * * @version 1.6.3.41 [20150820 duanyy]
* - 增加Env和SystemProperties的实现
* * @version 1.6.4.21 [20151229 duanyy]
* - 根据sonar建议优化代码
* * @version 1.6.4.43 [20160411 duanyy]
* - 加获取原始值的接口
*/ public interface DataProvider { /** * 获取指定变量的值 * * @param varName 变量名 * @param context 上下文 * @param defaultValue 缺省值 * @return 变量值 */ public String getValue(String varName,Object context,String defaultValue); /** * 获取指定变量的原始值 * @param varName 变量名 * @param context 上下文 * @param dftValue 缺省值 * @return 变量的原始值 * * @since 1.6.4.43 */ public String getRawValue(String varName,Object context,String dftValue); /** * 创建变量的上下文 * @param varName 变量名 * @return context 上下文对象 */ public Object getContext(String varName); /** * 封装SystemProperties的DataProvider * @author duanyy * @since 1.6.3.41 */ public static class SystemPropertiesDataProvider implements DataProvider{ @Override public String getValue(String varName, Object context, String defaultValue) { return System.getProperty(varName, defaultValue); } @Override public Object getContext(String varName) { return this; } @Override public String getRawValue(String varName, Object context, String dftValue) { return getValue(varName,context,dftValue); } } /** * 封装Env的DataProvider * @author duanyy * @since 1.6.3.41 */ public static class EnvDataProvider implements DataProvider{ @Override public String getValue(String varName, Object context, String defaultValue) { String value = System.getenv(varName); if (value == null || value.length() <= 0){ value = defaultValue; } return value; } @Override public String getRawValue(String varName, Object context, String dftValue) { return getValue(varName,context,dftValue); } @Override public Object getContext(String varName) { return this; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy