cheng029 发表于 2016-12-29 08:48:33

Apache

  Learning Site
http://commons.apache.org/jexl/
  Usage:
1. Expression Calculation
    i) Elements
        a. JexlContext hold on the variable numbers
        b. ExpressionFactory create an Expression instance to calculate
    ii) Examples
How to calculate the 2 expressions "3+2" and "n1+n2+2"
        FormulaCalculator.java  

package JEXL;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.jexl.Expression;
import org.apache.commons.jexl.ExpressionFactory;
import org.apache.commons.jexl.JexlContext;
/**
*
* JEXL test, this Util class is used for testing the Formula Calculator
*
* @author shangyang
*
*/
public class FormulaCalculator {
String _formula;
JexlContext _jexlContext;
Map _varMap;
public FormulaCalculator(){
_jexlContext = new JexlContext(){
public Map getVars() {
// TODO Auto-generated method stub
return _varMap;
}
public void setVars(Map vars) {
// TODO Auto-generated method stub
_varMap.clear();
_varMap.putAll( vars );
}
};
}
public void setFormula(String formula) throws Exception{
validateFormula( formula );
_formula = formula;
}
// set the values to the variable of the expression
public void setVars(Map<String, Number> vars){
_varMap = vars;
}
public Number calculate() throws Exception{
Expression e = ExpressionFactory.createExpression( _formula );
return (Number) e.evaluate( _jexlContext );
}
private void validateFormula( String formula ) throws Exception{
// FIXME: implementation
}
}
         FormulaCalculatorTest.java

package JEXL;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import org.junit.Assert;
public class FormulaCalculatorTest extends TestCase{
public void testCalculate() throws Exception{
String formula = "3+2";
FormulaCalculator cal = new FormulaCalculator();
cal.setFormula(formula);
cal.setVars(null);
Number n = cal.calculate();
Assert.assertEquals( 5, Integer.parseInt( n.toString() ));
String formula2 = "n1+n2+3";
cal.setFormula(formula2);
Map<String, Number> mapVars = new HashMap<String, Number>();
mapVars.put( "n1", 2);
mapVars.put( "n2", 3);
cal.setFormula( formula2);
cal.setVars( mapVars);
Number n2 = cal.calculate();
Assert.assertEquals(8, Integer.parseInt( n2.toString() ));
}
}
 
页: [1]
查看完整版本: Apache