001    package groovy.util;
002    
003    import org.codehaus.groovy.control.CompilationFailedException;
004    
005    import groovy.lang.Binding;
006    import groovy.lang.GroovyShell;
007    
008    /**
009     * Allow easy integration from Groovy into Java through convenience methods.
010     * @see EvalTest
011     * @author Dierk Koenig
012     */
013    
014    public class Eval {
015        /**
016         * @param expression the Groovy expression to evaluate
017         * @return the result of the expression
018         * @throws CompilationFailedException if expression is no proper Groovy
019         */
020        public static Object me(final String expression) throws CompilationFailedException {
021            return me(null, null, expression);
022        }
023    
024        /**
025         * evaluate expression and make object available inside the expression as 'symbol'
026         * @param expression the Groovy expression to evaluate
027         * @return the result of the expression
028         * @throws CompilationFailedException if expression is no proper Groovy
029         */
030        public static Object me(final String symbol, final Object object, final String expression) throws CompilationFailedException {
031            Binding b = new Binding();
032            b.setVariable(symbol, object);
033            GroovyShell sh = new GroovyShell(b);
034            return sh.evaluate(expression);
035        }
036    
037        /**
038         * evaluate expression and make x available inside the expression as 'x'
039         * @param expression the Groovy expression to evaluate
040         * @return the result of the expression
041         * @throws CompilationFailedException if expression is no proper Groovy
042         */
043        public static Object x(final Object x, final String expression) throws CompilationFailedException {
044            return me("x", x, expression);
045        }
046    
047        /**
048         * evaluate expression and make x and y available inside the expression as 'x' and 'y'
049         * @param expression the Groovy expression to evaluate
050         * @return the result of the expression
051         * @throws CompilationFailedException if expression is no proper Groovy
052         */
053        public static Object xy(final Object x, final Object y, final String expression) throws CompilationFailedException {
054            Binding b = new Binding();
055            b.setVariable("x", x);
056            b.setVariable("y", y);
057            GroovyShell sh = new GroovyShell(b);
058            return sh.evaluate(expression);
059        }
060    
061        /**
062         * evaluate expression and make x,y,z available inside the expression as 'x','y','z'
063         * @param expression the Groovy expression to evaluate
064         * @return the result of the expression
065         * @throws CompilationFailedException if expression is no proper Groovy
066         */
067        public static Object xyz(final Object x, final Object y, final Object z, final String expression) throws CompilationFailedException {
068            Binding b = new Binding();
069            b.setVariable("x", x);
070            b.setVariable("y", y);
071            b.setVariable("z", z);
072            GroovyShell sh = new GroovyShell(b);
073            return sh.evaluate(expression);
074        }
075    }