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

net.sf.xmlform.expression.AbstractExpressionContext Maven / Gradle / Ivy

There is a newer version: 3.2.0
Show newest version
package net.sf.xmlform.expression;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.xmlform.XMLFormPastport;
import net.sf.xmlform.expression.fun.*;
import net.sf.xmlform.expression.impl.AbstractValue;
import net.sf.xmlform.expression.type.*;

/**
 * @author Liu Zhikun
 */

public abstract class AbstractExpressionContext implements ExpressionContext {
	static private Map functions=new HashMap();
	static private Map fields=new HashMap();
	private Map tempValues=new HashMap();
	private XMLFormPastport pastport;
	static {
		regFun(new Abs());
		regFun(new Add());
		regFun(new Div());
		regFun(new Mod());
		regFun(new Mul());
		regFun(new Sub());
		regFun(new Ceil());
		regFun(new Floor());
		regFun(new Round());
		
		regFun(new And(),"and");
		regFun(new Eq(),"eq");
		regFun(new Ge(),"ge");
		regFun(new Gt(),"gt");
		regFun(new Le(),"le");
		regFun(new Lt(),"lt");
		regFun(new Not());
		regFun(new Or(),"or");
		regFun(new Ne(),"ne");
		
		regFun(new ToNumber());
		regFun(new ToInteger());
		regFun(new ToFloat());
		regFun(new ToString());
		
		regFun(new Set());
		regFun(new Get());
		
		regFun(new Concat());
		regFun(new NConcat());
		regFun(new NotNull());
		regFun(new Upper());
		regFun(new Lower());
		regFun(new Initcap());
		regFun(new Instr());
		regFun(new IsInteger());
		regFun(new IsFloat());
		regFun(new IsNull());
		regFun(new Length());
		regFun(new Lpad());
		regFun(new Rpad());
		regFun(new Ltrim());
		regFun(new Reverse());
		regFun(new Rtrim());
		regFun(new Substr());
		regFun(new Trim());
		regFun(new Replace());
		regFun(new Left());
		regFun(new Right());
		regFun(new Case());
		regFun(new Switch());
		regFun(new Nvl());
		regFun(new Greatest());
		regFun(new Least());
		
		regFun(new Contains());
		regFun(new NotContains());
		
		regFun(new Max());
		regFun(new Min());
		regFun(new Sum());
		regFun(new Avg());
		regFun(new Count());
		
		regFun(new AddDays());
		regFun(new AddMonths());
		regFun(new AddYears());
		regFun(new CurrentDate());
		regFun(new CurrentDatetime());
		regFun(new CurrentTime());
		regFun(new DaysDiff());
		regFun(new ToDate());
		regFun(new ToDatetime());
		regFun(new ToTime());
		
		regFun(new Count());
		
		regField(new BooleanTypeValue());
		regField(new ByteTypeValue());
		regField(new DecimalTypeValue());
		regField(new DoubleTypeValue());
		regField(new FloatTypeValue());
		regField(new IntegerTypeValue());
		regField(new IntTypeValue());
		regField(new LongTypeValue());
		regField(new ShortTypeValue());
		regField(new StringTypeValue());
		
		regField(new LocalDateTimeTypeValue());
		regField(new LocalDateTypeValue());
		regField(new LocalTimeTypeValue());
		regField(new YearMonthTypeValue());
		
		regField(new DateTimeTypeValue());
		regField(new DateTypeValue());
		regField(new TimeTypeValue());
	}
	private static void regFun(Fun fun){
		functions.put(fun.getName(), fun);
	}
	private static void regFun(Fun fun,String name){
		regFun(fun);
		//functions.put(name, fun);
	}
	private static void regField(net.sf.xmlform.expression.type.TypeValue field){
		fields.put(field.getType(), field);
	}
	public AbstractExpressionContext(XMLFormPastport pastport){
		this.pastport=pastport;
	}
	public Value executeFunction(String funName, Factor factors[]) {
		Fun f=getFunction(funName);
		if(f==null)
			FunHelper.throwException(getPastport().getLocale(), FunHelper.FUN_NAME_INVALID, new String[] {funName});
		return f.execute(this,factors);
	}
	public XMLFormPastport getPastport(){
		return pastport;
	}
	protected Fun getFunction(String funName){
		Fun f=(Fun)functions.get(funName);
		return f;
	}
	public Value convertToValue(Object value) {
		if(value instanceof Value)
			return (Value)value;
		Value nvalue=NullValue.NULL_VALUE;
		if(value==null){
			return NullValue.NULL_VALUE;
		}
		if(value instanceof List){
			return new ListValue((List)value);
		}else{
			TypeValue type=(net.sf.xmlform.expression.type.TypeValue)fields.get(value.getClass());
			if(type==null){
				return null;
			}
			return type.getValue(value);
		}
	}
	protected Value createNamedValue(String name,Object value){
		Value nvalue=convertToValue(value);
		if(nvalue==null){
			throw new IllegalStateException("Not found TypeValue for "+value.getClass()+" in AbstractExpressionContext");
		}
		((AbstractValue)nvalue).setName(name);
		return nvalue;
	}
	public Object getAttribute(String valueName){
		return tempValues.get(valueName);
	}
	public void setAttribute(String valueName,Object value){
		tempValues.put(valueName, value);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy