package org.molgenis.js;
import org.molgenis.js.nashorn.NashornScriptEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.script.ScriptException;
import static java.util.Objects.requireNonNull;
/**
* Executes a JavaScript
*/
@Service
class JsScriptExecutor
{
private final NashornScriptEngine jsScriptEngine;
@Autowired
public JsScriptExecutor(NashornScriptEngine jsScriptEngine)
{
this.jsScriptEngine = requireNonNull(jsScriptEngine);
}
/**
* Executes the given JavaScript, e.g. 'var product = 2 * 3; return product;'
*
* @param jsScript JavaScript
* @return value of which the type depends on the JavaScript type of the returned variable
*/
Object executeScript(String jsScript)
{
String jsScriptWithFunction = "(function (){" + jsScript + "})();";
try
{
return jsScriptEngine.eval(jsScriptWithFunction);
}
catch (ScriptException e)
{
throw new org.molgenis.script.ScriptException(e);
}
}
}