Search in sources :

Example 96 with VariablesMap

use of com.evolveum.midpoint.schema.expression.VariablesMap in project midpoint by Evolveum.

the class ScriptingExpressionEvaluator method evaluateExpression.

private ExecutionContext evaluateExpression(@NotNull ExecuteScriptType executeScript, VariablesMap initialVariables, boolean privileged, boolean recordProgressAndIterationStatistics, Task task, OperationResult result) throws ScriptExecutionException {
    Validate.notNull(executeScript.getScriptingExpression(), "Scripting expression must be present");
    ExpressionProfile expressionProfile = MiscSchemaUtil.getExpressionProfile();
    try {
        VariablesMap frozenVariables = VariablesUtil.initialPreparation(initialVariables, executeScript.getVariables(), expressionFactory, modelObjectResolver, prismContext, expressionProfile, task, result);
        PipelineData pipelineData = PipelineData.parseFrom(executeScript.getInput(), frozenVariables, prismContext);
        ExecutionContext context = new ExecutionContext(executeScript.getOptions(), task, this, privileged, recordProgressAndIterationStatistics, frozenVariables);
        PipelineData output = evaluateExpression(executeScript.getScriptingExpression().getValue(), pipelineData, context, result);
        context.setFinalOutput(output);
        result.computeStatusIfUnknown();
        context.computeResults();
        return context;
    } catch (ExpressionEvaluationException | SchemaException | ObjectNotFoundException | RuntimeException | CommunicationException | ConfigurationException | SecurityViolationException e) {
        result.recordFatalError("Couldn't execute script", e);
        throw new ScriptExecutionException("Couldn't execute script: " + e.getMessage(), e);
    } catch (Throwable t) {
        result.recordFatalError("Couldn't execute script", t);
        throw t;
    }
}
Also used : SchemaException(com.evolveum.midpoint.util.exception.SchemaException) ExpressionEvaluationException(com.evolveum.midpoint.util.exception.ExpressionEvaluationException) CommunicationException(com.evolveum.midpoint.util.exception.CommunicationException) SecurityViolationException(com.evolveum.midpoint.util.exception.SecurityViolationException) ScriptExecutionException(com.evolveum.midpoint.util.exception.ScriptExecutionException) ExpressionProfile(com.evolveum.midpoint.schema.expression.ExpressionProfile) ConfigurationException(com.evolveum.midpoint.util.exception.ConfigurationException) ObjectNotFoundException(com.evolveum.midpoint.util.exception.ObjectNotFoundException) VariablesMap(com.evolveum.midpoint.schema.expression.VariablesMap)

Example 97 with VariablesMap

use of com.evolveum.midpoint.schema.expression.VariablesMap in project midpoint by Evolveum.

the class ExecuteScriptExecutor method executeScript.

private <I> Object executeScript(ScriptExpression scriptExpression, TypedValue<I> inputTypedValue, VariablesMap externalVariables, ExecutionContext context, OperationResult result) throws ExpressionEvaluationException, ObjectNotFoundException, SchemaException, CommunicationException, ConfigurationException, SecurityViolationException {
    VariablesMap variables = createVariables(externalVariables);
    variables.put(ExpressionConstants.VAR_INPUT, inputTypedValue);
    LensContext<?> lensContext = getLensContext(externalVariables);
    List<?> rv = ModelImplUtils.evaluateScript(scriptExpression, lensContext, variables, true, "in '" + NAME + "' action", context.getTask(), result);
    if (rv.isEmpty()) {
        return null;
    } else if (rv.size() == 1) {
        return rv.get(0);
    } else {
        // shouldn't occur; would cause problems
        return rv;
    }
}
Also used : VariablesMap(com.evolveum.midpoint.schema.expression.VariablesMap)

Example 98 with VariablesMap

use of com.evolveum.midpoint.schema.expression.VariablesMap in project midpoint by Evolveum.

the class ScriptingTaskCreator method customizeTask.

TaskType customizeTask(TaskType preparedTask, OperationResult result) throws SchemaException, ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException, ExpressionEvaluationException {
    ExpressionType customizer = asynchronousScriptExecution.getTaskCustomizer();
    if (customizer == null) {
        return preparedTask;
    } else {
        ModelExpressionThreadLocalHolder.pushExpressionEnvironment(new ExpressionEnvironment<>(actx.context, null, actx.task, result));
        try {
            PrismObjectDefinition<TaskType> taskDefinition = preparedTask.asPrismObject().getDefinition();
            VariablesMap variables = createVariables();
            variables.addVariableDefinition(VAR_PREPARED_TASK, preparedTask, taskDefinition);
            ExpressionProfile expressionProfile = MiscSchemaUtil.getExpressionProfile();
            PrismValue customizedTaskValue = ExpressionUtil.evaluateExpression(variables, taskDefinition, customizer, expressionProfile, beans.expressionFactory, "task customizer", actx.task, result);
            if (customizedTaskValue == null) {
                throw new IllegalStateException("Task customizer returned no value");
            }
            if (!(customizedTaskValue instanceof PrismObjectValue)) {
                throw new IllegalStateException("Task customizer returned a value that is not a PrismObjectValue: " + customizedTaskValue);
            }
            Objectable customizedTaskBean = ((PrismObjectValue<?>) customizedTaskValue).asObjectable();
            if (!(customizedTaskBean instanceof TaskType)) {
                throw new IllegalStateException("Task customizer returned a value that is not a TaskType: " + customizedTaskBean);
            }
            return (TaskType) customizedTaskBean;
        } finally {
            ModelExpressionThreadLocalHolder.popExpressionEnvironment();
        }
    }
}
Also used : VariablesMap(com.evolveum.midpoint.schema.expression.VariablesMap) ExpressionProfile(com.evolveum.midpoint.schema.expression.ExpressionProfile)

Example 99 with VariablesMap

use of com.evolveum.midpoint.schema.expression.VariablesMap in project midpoint by Evolveum.

the class UnassignExecutor method createVariables.

private VariablesMap createVariables(AssignmentHolderType input, PipelineItem item) {
    VariablesMap variables = createVariables(item.getVariables());
    variables.put(ExpressionConstants.VAR_INPUT, input, AssignmentHolderType.class);
    return variables;
}
Also used : VariablesMap(com.evolveum.midpoint.schema.expression.VariablesMap)

Example 100 with VariablesMap

use of com.evolveum.midpoint.schema.expression.VariablesMap in project midpoint by Evolveum.

the class SynchronousScriptExecutor method executeScript.

private void executeScript(ExecuteScriptType specifiedExecuteScriptBean, OperationResult parentResult) {
    OperationResult result = parentResult.createSubresult(OP_EXECUTE_SCRIPT);
    try {
        ExecuteScriptType executeScriptBean = addInputIfNeeded(specifiedExecuteScriptBean, result);
        VariablesMap initialVariables = createInitialVariables();
        actx.beans.scriptingExpressionEvaluator.evaluateExpression(executeScriptBean, initialVariables, false, actx.task, result);
    } catch (Throwable t) {
        result.recordFatalError("Couldn't execute script policy action: " + t.getMessage(), t);
        LoggingUtils.logUnexpectedException(LOGGER, "Couldn't execute script with id={} in scriptExecution policy action '{}' (rule '{}'): {}", t, actx.action.getId(), actx.action.getName(), actx.rule.getName(), t.getMessage());
    } finally {
        result.computeStatusIfUnknown();
    }
}
Also used : ExecuteScriptType(com.evolveum.midpoint.xml.ns._public.model.scripting_3.ExecuteScriptType) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) VariablesMap(com.evolveum.midpoint.schema.expression.VariablesMap)

Aggregations

VariablesMap (com.evolveum.midpoint.schema.expression.VariablesMap)166 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)48 ExpressionEvaluationContext (com.evolveum.midpoint.repo.common.expression.ExpressionEvaluationContext)30 Test (org.testng.annotations.Test)28 Task (com.evolveum.midpoint.task.api.Task)23 NotNull (org.jetbrains.annotations.NotNull)23 QName (javax.xml.namespace.QName)15 AbstractInternalModelIntegrationTest (com.evolveum.midpoint.model.impl.AbstractInternalModelIntegrationTest)12 Source (com.evolveum.midpoint.repo.common.expression.Source)12 AbstractModelCommonTest (com.evolveum.midpoint.model.common.AbstractModelCommonTest)11 UserType (com.evolveum.midpoint.xml.ns._public.common.common_3.UserType)11 ExpressionFactory (com.evolveum.midpoint.repo.common.expression.ExpressionFactory)10 Trace (com.evolveum.midpoint.util.logging.Trace)10 TraceManager (com.evolveum.midpoint.util.logging.TraceManager)10 ObjectFilter (com.evolveum.midpoint.prism.query.ObjectFilter)9 ObjectQuery (com.evolveum.midpoint.prism.query.ObjectQuery)9 com.evolveum.midpoint.xml.ns._public.common.common_3 (com.evolveum.midpoint.xml.ns._public.common.common_3)9 PrismPropertyValue (com.evolveum.midpoint.prism.PrismPropertyValue)8 ExpressionType (com.evolveum.midpoint.xml.ns._public.common.common_3.ExpressionType)8 ExpressionEvaluationException (com.evolveum.midpoint.util.exception.ExpressionEvaluationException)7