import gnu.jel.CompilationException; import gnu.jel.CompiledExpression; import gnu.jel.DVMap; import gnu.jel.Evaluator; import gnu.jel.Library; import java.util.HashMap; public class Vars { private static String PROPNAME = "cos"; public static void main( String[] args ) throws CompilationException { Class[] staClasses = new Class[] { Math.class }; Class[] dynClasses = new Class[] { Item1.class, Item2.class }; Class[] dotClasses = new Class[ 0 ]; DVMap resolver = new Resolver(); HashMap> cnmap = null; Library lib = new Library( staClasses, dynClasses, dotClasses, resolver, cnmap ); Item1 item1 = new Item1( 23 ); Item2 item2 = new Item2( 5 ); Object[] context = new Object[] { item1, item2 }; String[] exprTxts = new String[] { "19+1", "sin", "sin(1)", "getDoubleProperty(\"" + PROPNAME + "\")", PROPNAME, "cos(1)", }; for ( String txt : exprTxts ) { StringBuffer sbuf = new StringBuffer( " " + txt ); try { CompiledExpression expr = Evaluator.compile( txt, lib ); sbuf.append( " = " + expr.evaluate( context ) ); } catch ( Throwable e ) { sbuf.append( " FAIL [" + e + "]" ); } System.out.println( sbuf.toString() ); } } public static class Item1 { public final double value; Item1( double value ) { this.value = value; } public double sin() { return this.value; } } public static class Item2 { public final double value; Item2( double value ) { this.value = value; } public double getDoubleProperty( String name ) { if ( PROPNAME.equals( name ) ) { return value; } else { throw new IllegalArgumentException( "No value " + name ); } } } public static class Resolver extends DVMap { public String getTypeName( String name ) { return PROPNAME.equals( name ) ? "Double" : null; } } }