maia_modificado/.svn/pristine/6c/6c74433207981e68b7eff577c91...

91 lines
2.7 KiB
Plaintext
Executable File

package com.fp.common.formula;
import java.math.BigDecimal;
import java.sql.Date;
import java.util.Stack;
import org.apache.log4j.Logger;
import org.nfunk.jep.ParseException;
import org.nfunk.jep.function.PostfixMathCommand;
import com.fp.common.helper.BeanManager;
public abstract class AbstractFunction extends PostfixMathCommand {
private static final Logger LOG = Logger.getLogger(AbstractFunction.class);
public abstract Object eval() throws Exception;
protected Stack stack;
@SuppressWarnings("unchecked")
@Override
public void run(Stack pStack) throws ParseException {
this.stack = pStack;
this.checkStack(pStack);
try {
pStack.push(this.eval());
} catch (Exception e) {
AbstractFunction.LOG.warn(e.getMessage(), e);
throw new ParseException(e.getMessage());
}
}
protected Object nextObjectParameter() {
// return this.stack.remove(0);
return this.stack.pop();
}
protected Object getConstant(String pName) {
return FormulaEvaluator.getRunning().getConstant(pName);
}
protected String getStringConstant(String pName) throws Exception {
String val = (String) FormulaEvaluator.getRunning().getConstant(pName);
if (val == null) {
throw new ParseException("Constante no especificada " + pName);
}
return val;
}
protected BigDecimal getBigDecimalConstant(String pName) throws Exception {
Object val = FormulaEvaluator.getRunning().getConstant(pName);
if (val == null) {
throw new ParseException("Constante no especificada " + pName);
}
if (val instanceof Number) {
return new BigDecimal(val.toString());
}
throw new ParseException("Valor no Valido");
}
protected BigDecimal nextBigDecimalParameter() throws Exception {
Object param = this.nextObjectParameter();
if (param instanceof Number) {
return new BigDecimal(param.toString());
}
if (param instanceof String) {
String constant = (String) param;
Object val = this.getConstant(constant);
if ((val != null) && (val instanceof Number)) {
return new BigDecimal(val.toString());
}
}
throw new ParseException("Tipo de Dato incorrecto");
}
protected Date nextDateParameter() throws Exception {
Object param = this.nextObjectParameter();
if (param instanceof Date) {
return (Date) param;
}
return BeanManager.convertObject(param, Date.class);
}
protected String nextStringParameter() {
Object param = this.nextObjectParameter();
return param.toString();
}
}