/*
 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     bstefanescu
 */
package org.nuxeo.ecm.automation.core.scripting;

import java.io.Serializable;

import org.mvel2.MVEL;
import org.mvel2.compiler.BlankLiteral;
import org.nuxeo.ecm.automation.OperationContext;

/**
 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a>
 */
public class MvelExpression implements Expression {

    private static final long serialVersionUID = 1L;

    protected transient volatile Serializable compiled;

    protected final String expr;

    public MvelExpression(String expr) {
        this.expr = expr;
    }

    public Object eval(OperationContext ctx) throws Exception {
        if (compiled == null) {
            compiled = MVEL.compileExpression(expr);
        }
        Object result = MVEL.executeExpression(compiled,
                Scripting.initBindings(ctx));
        return result != null
                && result.getClass().isAssignableFrom(BlankLiteral.class) ? ""
                : result;
    }

}

@@ -434,16 +434,38 @@
 lizable;
+%0Aimport java.util.Map;
 %0A%0Aimport
@@ -1134,38 +1134,11 @@
 led,
-%0A                Scripting.ini
+ ge
 tBin
@@ -1292,10 +1292,165 @@
 %0A    %7D%0A%0A
+    /**%0A     * @since 5.9.3%0A     */%0A    protected Map%3CString, Object%3E getBindings(OperationContext ctx) %7B%0A        return Scripting.initBindings(ctx);%0A    %7D%0A
 %7D
-%0A

add possibility to add custom bindings in scripting context