All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jp.vmi.script.JSWrapper Maven / Gradle / Ivy

package jp.vmi.script;

import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Wrapper for JavaScript object.
 */
public class JSWrapper {

    private static final Logger log = LoggerFactory.getLogger(JSWrapper.class);

    /** wrapped object name. */
    public static final String OBJECT = "object";

    /** arguments name. */
    public static final String ARGS = "args";

    private final ScriptEngine engine;
    private final Object object;
    private final Bindings bindings;

    /**
     * Constructor.
     *
     * @param engine script engine.
     * @param object wrapped JS object.
     */
    public JSWrapper(ScriptEngine engine, Object object) {
        this.engine = engine;
        this.object = object;
        this.bindings = engine.createBindings();
        this.bindings.put(OBJECT, object);
    }

    /**
     * Evaluate script.
     *
     * @param  result type.
     * @param script script.
     * @param args arguments.
     * @return result.
     */
    @SuppressWarnings("unchecked")
    public  T eval(String script, Object... args) {
        try {
            bindings.put(ARGS, args);
            return (T) engine.eval(script, bindings);
        } catch (ScriptException e) {
            log.info("Failed: [{}] - {}", script, e);
            return null;
        }
    }

    /**
     * Unwrap object.
     *
     * @return unwrapped object.
     */
    public Object unwrap() {
        return object;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy