Package org.boris.expr

Source Code of org.boris.expr.BasicEvaluationCallback

/*******************************************************************************
* This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
*     Peter Smith
*******************************************************************************/
package org.boris.expr;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.boris.expr.engine.GridMap;
import org.boris.expr.engine.Range;
import org.boris.expr.function.ExcelFunctionProvider;
import org.boris.expr.function.FunctionManager;
import org.boris.expr.parser.ExprLexer;
import org.boris.expr.parser.ExprParser;
import org.boris.expr.parser.IParserVisitor;
import org.boris.expr.util.Exprs;

public class BasicEvaluationCallback implements IEvaluationCallback,
        IParserVisitor
{
    private Map<String, Expr> variables = new HashMap();
    private FunctionManager functions = new FunctionManager();
    private GridMap grid = new GridMap();

    public BasicEvaluationCallback() {
        functions.add(new ExcelFunctionProvider());
        variables.put("TRUE", ExprBoolean.TRUE);
        variables.put("FALSE", ExprBoolean.FALSE);
    }

    public void addVariable(String name, Expr value) {
        variables.put(name, value);
    }

    public void addFunction(String name, IExprFunction function) {
        functions.add(name, function);
    }

    public Expr evaluateFunction(ExprFunction function) throws ExprException {
        return functions.evaluateFunction(function);
    }

    public Expr evaluateVariable(ExprVariable variable) throws ExprException {
        String name = variable.getName().toUpperCase();
        if (variables.containsKey(name)) {
            return variables.get(name);
        }
        Object ann = variable.getAnnotation();
        if (ann instanceof Range) {
            return grid.get((Range) ann);
        }
        Expr e = variables.get(name);
        if (e == null)
            return ExprError.NAME;
        return e;
    }

    public Expr parse(String expr) throws IOException, ExprException {
        ExprParser ep = new ExprParser();
        ep.setParserVisitor(this);
        ep.parse(new ExprLexer(expr), this);
        return ep.get();
    }

    public void set(String range, Object value) throws ExprException {
        grid.put(Range.valueOf(range), Exprs.convertObject(value));
    }

    public void set(Range range, Expr value) {
        grid.put(range, value);
    }

    public void set(ExprArray array) {
        set(Range.toRange(array, null), array);
    }

    public void annotateFunction(ExprFunction function) throws ExprException {
    }

    public void annotateVariable(ExprVariable variable) throws ExprException {
        variable.setAnnotation(Range.valueOf(variable.getName()));
    }
}
TOP

Related Classes of org.boris.expr.BasicEvaluationCallback

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.