Search in sources :

Example 6 with ScriptUtility

use of com.infiniteautomation.mango.util.script.ScriptUtility in project ma-core-public by infiniteautomation.

the class MangoJavaScriptService method execute.

/**
 * Reset result and execute script for any type of result
 */
public void execute(CompiledMangoJavaScript script, long runtime, long timestamp) throws ScriptError, ScriptPermissionsException {
    try {
        runAs.runAsCallable(script.getPermissionHolder(), () -> {
            script.getResult().reset();
            // Setup the wrapper context
            Bindings engineScope = script.getEngine().getBindings(ScriptContext.ENGINE_SCOPE);
            engineScope.put(MangoJavaScriptService.WRAPPER_CONTEXT_KEY, new WrapperContext(runtime, timestamp));
            // Ensure the result is available to the utilities
            for (ScriptUtility util : script.getUtilities()) {
                util.setResult(script.getResult());
            }
            // Initialize additional utilities
            for (ScriptUtility util : script.getAdditionalUtilities()) util.setResult(script.getResult());
            Object resultObject = script.getCompiledScript().eval();
            script.getResult().setResult(resultObject);
            return null;
        });
    } catch (ScriptException e) {
        throw ScriptError.create(e, script.isWrapInFunction());
    } catch (RuntimeException e) {
        // Nashorn seems to like to wrap exceptions in RuntimeException
        if (e.getCause() instanceof ScriptPermissionsException)
            throw (ScriptPermissionsException) e.getCause();
        else
            throw new ShouldNeverHappenException(e);
    } catch (Exception e) {
        throw new ShouldNeverHappenException(e);
    }
}
Also used : WrapperContext(com.serotonin.m2m2.rt.script.WrapperContext) ScriptException(javax.script.ScriptException) ScriptPermissionsException(com.serotonin.m2m2.rt.script.ScriptPermissionsException) ShouldNeverHappenException(com.serotonin.ShouldNeverHappenException) SimpleBindings(javax.script.SimpleBindings) Bindings(javax.script.Bindings) ScriptUtility(com.infiniteautomation.mango.util.script.ScriptUtility) ScriptException(javax.script.ScriptException) ResultTypeException(com.serotonin.m2m2.rt.script.ResultTypeException) ScriptPermissionsException(com.serotonin.m2m2.rt.script.ScriptPermissionsException) ShouldNeverHappenException(com.serotonin.ShouldNeverHappenException) ValidationException(com.infiniteautomation.mango.util.exception.ValidationException) DataPointStateException(com.serotonin.m2m2.rt.script.DataPointStateException) PermissionException(com.serotonin.m2m2.vo.permission.PermissionException)

Aggregations

ScriptUtility (com.infiniteautomation.mango.util.script.ScriptUtility)6 ShouldNeverHappenException (com.serotonin.ShouldNeverHappenException)4 ScriptPermissionsException (com.serotonin.m2m2.rt.script.ScriptPermissionsException)4 Bindings (javax.script.Bindings)4 ScriptException (javax.script.ScriptException)4 SimpleBindings (javax.script.SimpleBindings)4 ValidationException (com.infiniteautomation.mango.util.exception.ValidationException)2 MangoJavascriptContextObjectDefinition (com.serotonin.m2m2.module.MangoJavascriptContextObjectDefinition)2 IDataPointValueSource (com.serotonin.m2m2.rt.dataImage.IDataPointValueSource)2 AbstractPointWrapper (com.serotonin.m2m2.rt.script.AbstractPointWrapper)2 DataPointStateException (com.serotonin.m2m2.rt.script.DataPointStateException)2 ResultTypeException (com.serotonin.m2m2.rt.script.ResultTypeException)2 WrapperContext (com.serotonin.m2m2.rt.script.WrapperContext)2 PermissionException (com.serotonin.m2m2.vo.permission.PermissionException)2 HashMap (java.util.HashMap)2 HashSet (java.util.HashSet)2 Entry (java.util.Map.Entry)2