Search in sources :

Example 1 with VARIABLE_SCOPE

use of io.automatiko.engine.workflow.base.core.context.variable.VariableScope.VARIABLE_SCOPE in project automatiko-engine by automatiko-io.

the class CompositeContextNodeInstance method processInputMappings.

@SuppressWarnings({ "unchecked", "rawtypes" })
protected void processInputMappings() {
    VariableScopeInstance compositeVariableScopeInstance = (VariableScopeInstance) getContextInstance(VARIABLE_SCOPE);
    for (DataAssociation association : getCompositeContextNode().getInAssociations()) {
        if (association.getTransformation() != null) {
            Transformation transformation = association.getTransformation();
            DataTransformer transformer = DataTransformerRegistry.get().find(transformation.getLanguage());
            if (transformer != null) {
                Object parameterValue = transformer.transform(transformation.getCompiledExpression(), getProcessInstance().getVariables());
                if (parameterValue != null) {
                    compositeVariableScopeInstance.setVariable(association.getTarget(), parameterValue);
                }
            }
        } else if (association.getAssignments() == null || association.getAssignments().isEmpty()) {
            Object parameterValue = null;
            VariableScopeInstance variableScopeInstance = (VariableScopeInstance) resolveContextInstance(VARIABLE_SCOPE, association.getSources().get(0));
            if (variableScopeInstance != null) {
                parameterValue = variableScopeInstance.getVariable(association.getSources().get(0));
            } else {
                try {
                    ExpressionEvaluator evaluator = (ExpressionEvaluator) ((WorkflowProcess) getProcessInstance().getProcess()).getDefaultContext(ExpressionEvaluator.EXPRESSION_EVALUATOR);
                    parameterValue = evaluator.evaluate(association.getSources().get(0), new NodeInstanceResolverFactory(this));
                } catch (Throwable t) {
                    logger.error("Could not find variable scope for variable {}", association.getSources().get(0));
                    logger.error("Continuing without setting parameter.");
                }
            }
            if (parameterValue != null) {
                compositeVariableScopeInstance.setVariable(association.getTarget(), parameterValue);
            }
        } else {
            association.getAssignments().stream().forEach(assignment -> handleAssignment(assignment, compositeVariableScopeInstance));
        }
    }
}
Also used : Context(io.automatiko.engine.workflow.base.core.Context) Assignment(io.automatiko.engine.workflow.process.core.node.Assignment) LoggerFactory(org.slf4j.LoggerFactory) HashMap(java.util.HashMap) ProcessContext(io.automatiko.engine.workflow.base.core.context.ProcessContext) VariableScopeInstance(io.automatiko.engine.workflow.base.instance.context.variable.VariableScopeInstance) ArrayList(java.util.ArrayList) DataTransformer(io.automatiko.engine.api.runtime.process.DataTransformer) ContextInstanceContainer(io.automatiko.engine.workflow.base.instance.ContextInstanceContainer) ExpressionEvaluator(io.automatiko.engine.api.expression.ExpressionEvaluator) ContextInstanceFactoryRegistry(io.automatiko.engine.workflow.base.instance.impl.ContextInstanceFactoryRegistry) DataAssociation(io.automatiko.engine.workflow.process.core.node.DataAssociation) ContextContainer(io.automatiko.engine.workflow.base.core.ContextContainer) CompositeContextNode(io.automatiko.engine.workflow.process.core.node.CompositeContextNode) Map(java.util.Map) WorkflowProcess(io.automatiko.engine.workflow.process.core.WorkflowProcess) ContextInstanceFactory(io.automatiko.engine.workflow.base.instance.impl.ContextInstanceFactory) VARIABLE_SCOPE(io.automatiko.engine.workflow.base.core.context.variable.VariableScope.VARIABLE_SCOPE) Logger(org.slf4j.Logger) NodeInstance(io.automatiko.engine.api.runtime.process.NodeInstance) NodeInstanceResolverFactory(io.automatiko.engine.workflow.process.instance.impl.NodeInstanceResolverFactory) WorkItemExecutionError(io.automatiko.engine.api.workflow.workitem.WorkItemExecutionError) Transformation(io.automatiko.engine.workflow.process.core.node.Transformation) DataTransformerRegistry(io.automatiko.engine.workflow.base.core.impl.DataTransformerRegistry) List(java.util.List) ProcessInstance(io.automatiko.engine.workflow.base.instance.ProcessInstance) ContextInstance(io.automatiko.engine.workflow.base.instance.ContextInstance) AssignmentAction(io.automatiko.engine.workflow.base.instance.impl.AssignmentAction) ContextableInstance(io.automatiko.engine.workflow.base.instance.ContextableInstance) Transformation(io.automatiko.engine.workflow.process.core.node.Transformation) VariableScopeInstance(io.automatiko.engine.workflow.base.instance.context.variable.VariableScopeInstance) DataTransformer(io.automatiko.engine.api.runtime.process.DataTransformer) DataAssociation(io.automatiko.engine.workflow.process.core.node.DataAssociation) NodeInstanceResolverFactory(io.automatiko.engine.workflow.process.instance.impl.NodeInstanceResolverFactory) ExpressionEvaluator(io.automatiko.engine.api.expression.ExpressionEvaluator) WorkflowProcess(io.automatiko.engine.workflow.process.core.WorkflowProcess)

Example 2 with VARIABLE_SCOPE

use of io.automatiko.engine.workflow.base.core.context.variable.VariableScope.VARIABLE_SCOPE in project automatiko-engine by automatiko-io.

the class CompositeContextNodeInstance method triggerCompleted.

@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void triggerCompleted(String outType) {
    VariableScopeInstance compositeVariableScopeInstance = (VariableScopeInstance) getContextInstance(VARIABLE_SCOPE);
    for (DataAssociation association : getCompositeContextNode().getOutAssociations()) {
        if (association.getTransformation() != null) {
            Transformation transformation = association.getTransformation();
            DataTransformer transformer = DataTransformerRegistry.get().find(transformation.getLanguage());
            if (transformer != null) {
                Object parameterValue = transformer.transform(transformation.getCompiledExpression(), compositeVariableScopeInstance.getVariables());
                if (parameterValue != null) {
                    getProcessInstance().setVariable(association.getTarget(), parameterValue);
                }
            }
        } else if (association.getAssignments() == null || association.getAssignments().isEmpty()) {
            Object parameterValue = null;
            VariableScopeInstance variableScopeInstance = (VariableScopeInstance) resolveContextInstance(VARIABLE_SCOPE, association.getSources().get(0));
            if (variableScopeInstance != null) {
                parameterValue = variableScopeInstance.getVariable(association.getSources().get(0));
            } else {
                try {
                    ExpressionEvaluator evaluator = (ExpressionEvaluator) ((WorkflowProcess) getProcessInstance().getProcess()).getDefaultContext(ExpressionEvaluator.EXPRESSION_EVALUATOR);
                    parameterValue = evaluator.evaluate(association.getSources().get(0), new NodeInstanceResolverFactory(this));
                } catch (Throwable t) {
                    logger.error("Could not find variable scope for variable {}", association.getSources().get(0));
                    logger.error("Continuing without setting parameter.");
                }
            }
            if (parameterValue != null) {
                getProcessInstance().setVariable(association.getTarget(), parameterValue);
            }
        } else {
            association.getAssignments().stream().forEach(assignment -> handleAssignment(assignment, compositeVariableScopeInstance));
        }
    }
    super.triggerCompleted(outType);
}
Also used : Context(io.automatiko.engine.workflow.base.core.Context) Assignment(io.automatiko.engine.workflow.process.core.node.Assignment) LoggerFactory(org.slf4j.LoggerFactory) HashMap(java.util.HashMap) ProcessContext(io.automatiko.engine.workflow.base.core.context.ProcessContext) VariableScopeInstance(io.automatiko.engine.workflow.base.instance.context.variable.VariableScopeInstance) ArrayList(java.util.ArrayList) DataTransformer(io.automatiko.engine.api.runtime.process.DataTransformer) ContextInstanceContainer(io.automatiko.engine.workflow.base.instance.ContextInstanceContainer) ExpressionEvaluator(io.automatiko.engine.api.expression.ExpressionEvaluator) ContextInstanceFactoryRegistry(io.automatiko.engine.workflow.base.instance.impl.ContextInstanceFactoryRegistry) DataAssociation(io.automatiko.engine.workflow.process.core.node.DataAssociation) ContextContainer(io.automatiko.engine.workflow.base.core.ContextContainer) CompositeContextNode(io.automatiko.engine.workflow.process.core.node.CompositeContextNode) Map(java.util.Map) WorkflowProcess(io.automatiko.engine.workflow.process.core.WorkflowProcess) ContextInstanceFactory(io.automatiko.engine.workflow.base.instance.impl.ContextInstanceFactory) VARIABLE_SCOPE(io.automatiko.engine.workflow.base.core.context.variable.VariableScope.VARIABLE_SCOPE) Logger(org.slf4j.Logger) NodeInstance(io.automatiko.engine.api.runtime.process.NodeInstance) NodeInstanceResolverFactory(io.automatiko.engine.workflow.process.instance.impl.NodeInstanceResolverFactory) WorkItemExecutionError(io.automatiko.engine.api.workflow.workitem.WorkItemExecutionError) Transformation(io.automatiko.engine.workflow.process.core.node.Transformation) DataTransformerRegistry(io.automatiko.engine.workflow.base.core.impl.DataTransformerRegistry) List(java.util.List) ProcessInstance(io.automatiko.engine.workflow.base.instance.ProcessInstance) ContextInstance(io.automatiko.engine.workflow.base.instance.ContextInstance) AssignmentAction(io.automatiko.engine.workflow.base.instance.impl.AssignmentAction) ContextableInstance(io.automatiko.engine.workflow.base.instance.ContextableInstance) Transformation(io.automatiko.engine.workflow.process.core.node.Transformation) VariableScopeInstance(io.automatiko.engine.workflow.base.instance.context.variable.VariableScopeInstance) DataTransformer(io.automatiko.engine.api.runtime.process.DataTransformer) DataAssociation(io.automatiko.engine.workflow.process.core.node.DataAssociation) NodeInstanceResolverFactory(io.automatiko.engine.workflow.process.instance.impl.NodeInstanceResolverFactory) ExpressionEvaluator(io.automatiko.engine.api.expression.ExpressionEvaluator) WorkflowProcess(io.automatiko.engine.workflow.process.core.WorkflowProcess)

Example 3 with VARIABLE_SCOPE

use of io.automatiko.engine.workflow.base.core.context.variable.VariableScope.VARIABLE_SCOPE in project automatiko-engine by automatiko-io.

the class EventNodeInstance method signalEvent.

public void signalEvent(String type, Object event) {
    if ("timerTriggered".equals(type)) {
        TimerInstance timerInstance = (TimerInstance) event;
        if (timerInstance.getId().equals(slaTimerId)) {
            handleSLAViolation();
        }
    } else if (("slaViolation:" + getId()).equals(type)) {
        handleSLAViolation();
    } else {
        String variableName = getEventNode().getVariableName();
        if (!getEventNode().getOutAssociations().isEmpty()) {
            for (DataAssociation association : getEventNode().getOutAssociations()) {
                if (association.getAssignments() == null || association.getAssignments().isEmpty()) {
                    VariableScopeInstance variableScopeInstance = (VariableScopeInstance) resolveContextInstance(VARIABLE_SCOPE, association.getTarget());
                    if (variableScopeInstance != null) {
                        Variable varDef = variableScopeInstance.getVariableScope().findVariable(association.getTarget());
                        DataType dataType = varDef.getType();
                        // exclude java.lang.Object as it is considered unknown type
                        if (!dataType.getStringType().endsWith("java.lang.Object") && !dataType.getStringType().endsWith("Object") && event instanceof String) {
                            event = dataType.readValue((String) event);
                        } else {
                            variableScopeInstance.getVariableScope().validateVariable(getProcessInstance().getProcessName(), association.getTarget(), event);
                        }
                        variableScopeInstance.setVariable(this, association.getTarget(), event);
                    } else {
                        String output = association.getSources().get(0);
                        String target = association.getTarget();
                        Matcher matcher = PatternConstants.PARAMETER_MATCHER.matcher(target);
                        if (matcher.find()) {
                            String paramName = matcher.group(1);
                            String expression = VariableUtil.transformDotNotation(paramName, output);
                            NodeInstanceResolverFactory resolver = new NodeInstanceResolverFactory(this);
                            resolver.addExtraParameters(Collections.singletonMap(association.getSources().get(0), event));
                            Serializable compiled = MVEL.compileExpression(expression);
                            MVEL.executeExpression(compiled, resolver);
                            String varName = VariableUtil.nameFromDotNotation(paramName);
                            variableScopeInstance = (VariableScopeInstance) resolveContextInstance(VARIABLE_SCOPE, varName);
                            variableScopeInstance.setVariable(this, varName, variableScopeInstance.getVariable(varName));
                        } else {
                            logger.warn("Could not find variable scope for variable {}", association.getTarget());
                            logger.warn("when trying to complete start node {}", getEventNode().getName());
                            logger.warn("Continuing without setting variable.");
                        }
                    }
                } else {
                    Object data = event;
                    association.getAssignments().stream().forEach(assignment -> handleAssignment(assignment, data));
                }
            }
        } else if (variableName != null) {
            VariableScopeInstance variableScopeInstance = (VariableScopeInstance) resolveContextInstance(VariableScope.VARIABLE_SCOPE, variableName);
            if (variableScopeInstance != null) {
                EventTransformer transformer = getEventNode().getEventTransformer();
                if (transformer != null) {
                    event = transformer.transformEvent(event);
                }
                variableScopeInstance.setVariable(this, variableName, event);
            } else {
                String output = "event";
                Matcher matcher = PatternConstants.PARAMETER_MATCHER.matcher(variableName);
                if (matcher.find()) {
                    String paramName = matcher.group(1);
                    String expression = VariableUtil.transformDotNotation(paramName, output);
                    NodeInstanceResolverFactory resolver = new NodeInstanceResolverFactory(this);
                    resolver.addExtraParameters(Collections.singletonMap("event", event));
                    Serializable compiled = MVEL.compileExpression(expression);
                    MVEL.executeExpression(compiled, resolver);
                    String varName = VariableUtil.nameFromDotNotation(paramName);
                    variableScopeInstance = (VariableScopeInstance) resolveContextInstance(VARIABLE_SCOPE, varName);
                    variableScopeInstance.setVariable(this, varName, variableScopeInstance.getVariable(varName));
                } else {
                    logger.warn("Could not find variable scope for variable {}", variableName);
                    logger.warn("when trying to complete start node {}", getEventNode().getName());
                    logger.warn("Continuing without setting variable.");
                }
            }
        }
        triggerCompleted();
    }
}
Also used : VariableUtil(io.automatiko.engine.workflow.base.instance.impl.util.VariableUtil) Assignment(io.automatiko.engine.workflow.process.core.node.Assignment) Date(java.util.Date) WorkflowProcessInstanceImpl(io.automatiko.engine.workflow.process.instance.impl.WorkflowProcessInstanceImpl) DataType(io.automatiko.engine.api.workflow.datatype.DataType) HashMap(java.util.HashMap) ProcessContext(io.automatiko.engine.workflow.base.core.context.ProcessContext) NamedDataType(io.automatiko.engine.api.workflow.NamedDataType) VariableScopeInstance(io.automatiko.engine.workflow.base.instance.context.variable.VariableScopeInstance) Matcher(java.util.regex.Matcher) JobsService(io.automatiko.engine.api.jobs.JobsService) BaseEventDescription(io.automatiko.engine.api.workflow.BaseEventDescription) DataAssociation(io.automatiko.engine.workflow.process.core.node.DataAssociation) WorkItemImpl(io.automatiko.engine.workflow.base.instance.impl.workitem.WorkItemImpl) Map(java.util.Map) InternalProcessRuntime(io.automatiko.engine.workflow.base.instance.InternalProcessRuntime) EventListener(io.automatiko.engine.api.runtime.process.EventListener) ExtendedNodeInstanceImpl(io.automatiko.engine.workflow.process.instance.impl.ExtendedNodeInstanceImpl) VARIABLE_SCOPE(io.automatiko.engine.workflow.base.core.context.variable.VariableScope.VARIABLE_SCOPE) NodeInstance(io.automatiko.engine.api.runtime.process.NodeInstance) NodeInstanceState(io.automatiko.engine.api.runtime.process.NodeInstanceState) NodeInstanceResolverFactory(io.automatiko.engine.workflow.process.instance.impl.NodeInstanceResolverFactory) EventTransformer(io.automatiko.engine.workflow.base.core.event.EventTransformer) Set(java.util.Set) VariableScope(io.automatiko.engine.workflow.base.core.context.variable.VariableScope) EMPTY_EVENT_LISTENER(io.automatiko.engine.workflow.process.instance.impl.DummyEventListener.EMPTY_EVENT_LISTENER) WorkItemExecutionError(io.automatiko.engine.api.workflow.workitem.WorkItemExecutionError) Serializable(java.io.Serializable) TimerInstance(io.automatiko.engine.services.time.TimerInstance) ProcessInstance(io.automatiko.engine.workflow.base.instance.ProcessInstance) PatternConstants(io.automatiko.engine.workflow.util.PatternConstants) Entry(java.util.Map.Entry) Variable(io.automatiko.engine.workflow.base.core.context.variable.Variable) EventDescription(io.automatiko.engine.api.workflow.EventDescription) AssignmentAction(io.automatiko.engine.workflow.base.instance.impl.AssignmentAction) WorkflowProcessInstance(io.automatiko.engine.workflow.process.instance.WorkflowProcessInstance) Collections(java.util.Collections) MVEL(org.mvel2.MVEL) EventNode(io.automatiko.engine.workflow.process.core.node.EventNode) Serializable(java.io.Serializable) Variable(io.automatiko.engine.workflow.base.core.context.variable.Variable) VariableScopeInstance(io.automatiko.engine.workflow.base.instance.context.variable.VariableScopeInstance) EventTransformer(io.automatiko.engine.workflow.base.core.event.EventTransformer) TimerInstance(io.automatiko.engine.services.time.TimerInstance) DataAssociation(io.automatiko.engine.workflow.process.core.node.DataAssociation) Matcher(java.util.regex.Matcher) NodeInstanceResolverFactory(io.automatiko.engine.workflow.process.instance.impl.NodeInstanceResolverFactory) DataType(io.automatiko.engine.api.workflow.datatype.DataType) NamedDataType(io.automatiko.engine.api.workflow.NamedDataType)

Aggregations

NodeInstance (io.automatiko.engine.api.runtime.process.NodeInstance)3 WorkItemExecutionError (io.automatiko.engine.api.workflow.workitem.WorkItemExecutionError)3 ProcessContext (io.automatiko.engine.workflow.base.core.context.ProcessContext)3 VARIABLE_SCOPE (io.automatiko.engine.workflow.base.core.context.variable.VariableScope.VARIABLE_SCOPE)3 ProcessInstance (io.automatiko.engine.workflow.base.instance.ProcessInstance)3 VariableScopeInstance (io.automatiko.engine.workflow.base.instance.context.variable.VariableScopeInstance)3 AssignmentAction (io.automatiko.engine.workflow.base.instance.impl.AssignmentAction)3 Assignment (io.automatiko.engine.workflow.process.core.node.Assignment)3 DataAssociation (io.automatiko.engine.workflow.process.core.node.DataAssociation)3 NodeInstanceResolverFactory (io.automatiko.engine.workflow.process.instance.impl.NodeInstanceResolverFactory)3 HashMap (java.util.HashMap)3 Map (java.util.Map)3 ExpressionEvaluator (io.automatiko.engine.api.expression.ExpressionEvaluator)2 DataTransformer (io.automatiko.engine.api.runtime.process.DataTransformer)2 Context (io.automatiko.engine.workflow.base.core.Context)2 ContextContainer (io.automatiko.engine.workflow.base.core.ContextContainer)2 DataTransformerRegistry (io.automatiko.engine.workflow.base.core.impl.DataTransformerRegistry)2 ContextInstance (io.automatiko.engine.workflow.base.instance.ContextInstance)2 ContextInstanceContainer (io.automatiko.engine.workflow.base.instance.ContextInstanceContainer)2 ContextableInstance (io.automatiko.engine.workflow.base.instance.ContextableInstance)2