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

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

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

import java.util.Hashtable;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 函数对象辅助器
 * 
 * 
* 函数对象辅助器维护了一个函数的映射表,并根据框架的要求生成相应函数的实例
* @author duanyy * @version 1.6.4.21 [20151229 duanyy]
* - 根据sonar建议优化代码
* * @version 1.6.7.9 [20170201 duanyy]
* - 采用SLF4j日志框架输出日志
* * @version 1.6.12.4 [20171029 duanyy]
* - 增加floor,round,ceil等函数;
* * @version 1.6.12.57 [20200103]
* - 增加t函数
*/ @SuppressWarnings("unchecked") public class DefaultFunctionHelper implements FunctionHelper { /** * a logger of log4j */ protected static final Logger LOG = LoggerFactory.getLogger(FunctionHelper.class); /** * 父节点 */ protected FunctionHelper parent = null; /** * 内置静态的函数映射表 */ protected static Hashtable> static_mappings = new Hashtable>(); // NOSONAR /** * 内置的函数 */ static { try { static_mappings.put("choice", (Class) Class .forName("com.anysoft.formula.Function$Choice")); static_mappings.put("nvl", (Class) Class .forName("com.anysoft.formula.Function$Nvl")); static_mappings.put("to_date", (Class) Class .forName("com.anysoft.formula.Function$Char2Date")); static_mappings.put("to_char", (Class) Class .forName("com.anysoft.formula.Function$Date2Char")); static_mappings.put("to_string", (Class) Class .forName("com.anysoft.formula.Function$ToString")); static_mappings.put("to_long", (Class) Class .forName("com.anysoft.formula.Function$ToLong")); static_mappings.put("to_double", (Class) Class .forName("com.anysoft.formula.Function$ToDouble")); static_mappings.put("to_bool", (Class) Class .forName("com.anysoft.formula.Function$ToBoolean")); static_mappings.put("to_boolean", (Class) Class .forName("com.anysoft.formula.Function$ToBoolean")); static_mappings.put("round", (Class) Class .forName("com.anysoft.formula.Function$Round")); static_mappings.put("ceil", (Class) Class .forName("com.anysoft.formula.Function$Ceil")); static_mappings.put("floor", (Class) Class .forName("com.anysoft.formula.Function$Floor")); static_mappings.put("substr", (Class) Class .forName("com.anysoft.formula.Function$SubStr")); static_mappings.put("instr", (Class) Class .forName("com.anysoft.formula.Function$InStr")); static_mappings.put("strlen", (Class) Class .forName("com.anysoft.formula.Function$StrLen")); static_mappings.put("match", (Class) Class .forName("com.anysoft.formula.Function$Match")); static_mappings.put("filter_tt", (Class) Class .forName("com.anysoft.formula.filter.Timestamp")); static_mappings.put("t",(Class)Class.forName("com.anysoft.formula.Function$AutoType")); } catch (ClassNotFoundException e) { LOG.error(e.getMessage()); } } /** * 构造函数 * @param theParent 父节点 */ public DefaultFunctionHelper(FunctionHelper theParent) { parent = theParent; } /** * 构造函数 */ public DefaultFunctionHelper() { this(null); } /** * 注册函数映射 * @param funcName 函数名 * @param funClass 对应的函数实现的类名 */ public static void addFunction(String funcName, Class funClass) { static_mappings.put(funcName, funClass); } /** * 注销函数映射 * @param funcName 函数名 */ public static void removeFunction(String funcName) { static_mappings.remove(funcName); } @Override public Expression customize(String funcName) { try { Class found = static_mappings.get(funcName); if (found != null) { return found.newInstance(); } if (parent != null) { return parent.customize(funcName); } throw new FormulaException("Can not find function :" + funcName); } catch (Exception ex) { LOG.error(ex.getMessage()); throw new FormulaException("Can not create function :" + funcName); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy