package mobvista.dmp.function import com.googlecode.aviator.runtime.`type`.AviatorFunction import com.googlecode.aviator.{AviatorEvaluator, Expression} object FunctionManager extends Serializable { var expressionMap = Map[String,Expression]() val EXP_SPLIT_TEXT_INPUT = "split_text_input_data(line)" val EXP_SPLIT_TEXT_INPUT_INDICES = "split_text_input_data(line, indices)" val EXP_SPLIT_RCFILE_INPUT = "split_rcfile_input_data(line, indices)" val EXP_SPLIT_ORC_INPUT = "split_orc_input_data(line)" val EXP_SPLIT_ORC_INPUT_INDICES = "split_orc_input_data(line, indices)" val EXP_BUILD_ADDRESSVO_INPUT_INDICES = "build_addressvo(line, indices)" AviatorEvaluator.addFunction(new SplitTextInputData) AviatorEvaluator.addFunction(new SplitRCFileInputData) AviatorEvaluator.addFunction(new SplitORCInputData) AviatorEvaluator.addFunction(new BuildAddressVO) setExpression(EXP_SPLIT_TEXT_INPUT) setExpression(EXP_SPLIT_TEXT_INPUT_INDICES) setExpression(EXP_SPLIT_RCFILE_INPUT) setExpression(EXP_SPLIT_ORC_INPUT) setExpression(EXP_SPLIT_ORC_INPUT_INDICES) setExpression(EXP_BUILD_ADDRESSVO_INPUT_INDICES) def setExpression(express :String) { val expression = expressionMap.getOrElse(express, AviatorEvaluator.compile(express)) if(!expressionMap.contains(express)){ expressionMap += (express -> expression) } } def getExpression(express :String) :Expression ={ val expression = expressionMap.getOrElse(express, AviatorEvaluator.compile(express)) if(!expressionMap.contains(express)){ expressionMap += (express -> expression) } expression } def addAviatorEvaluatorFunction(function :AviatorFunction){ AviatorEvaluator.addFunction(function) } }