Search in sources :

Example 56 with ExecutableProcess

use of io.automatiko.engine.workflow.process.executable.core.ExecutableProcess in project automatiko-engine by automatiko-io.

the class ProcessRuntimeImpl method initProcessEventListener.

private void initProcessEventListener(Process process) {
    if (process instanceof ExecutableProcess) {
        for (Node node : ((ExecutableProcess) process).getNodes()) {
            if (node instanceof StartNode) {
                StartNode startNode = (StartNode) node;
                if (startNode != null) {
                    List<Trigger> triggers = startNode.getTriggers();
                    if (triggers != null) {
                        for (Trigger trigger : triggers) {
                            if (trigger instanceof EventTrigger) {
                                final List<EventFilter> filters = ((EventTrigger) trigger).getEventFilters();
                                String type = null;
                                for (EventFilter filter : filters) {
                                    if (filter instanceof EventTypeFilter) {
                                        type = ((EventTypeFilter) filter).getType();
                                    }
                                }
                                StartProcessEventListener listener = new StartProcessEventListener(process.getId(), filters, trigger.getInMappings(), startNode.getEventTransformer());
                                signalManager.addEventListener(type, listener);
                                ((ExecutableProcess) process).getRuntimeMetaData().put("StartProcessEventType", type);
                                ((ExecutableProcess) process).getRuntimeMetaData().put("StartProcessEventListener", listener);
                            }
                        }
                    }
                }
            }
        }
    }
}
Also used : StartNode(io.automatiko.engine.workflow.process.core.node.StartNode) EventTypeFilter(io.automatiko.engine.workflow.base.core.event.EventTypeFilter) Trigger(io.automatiko.engine.workflow.process.core.node.Trigger) EventTrigger(io.automatiko.engine.workflow.process.core.node.EventTrigger) Node(io.automatiko.engine.api.definition.process.Node) StartNode(io.automatiko.engine.workflow.process.core.node.StartNode) ExecutableProcess(io.automatiko.engine.workflow.process.executable.core.ExecutableProcess) EventFilter(io.automatiko.engine.workflow.base.core.event.EventFilter) EventTrigger(io.automatiko.engine.workflow.process.core.node.EventTrigger)

Example 57 with ExecutableProcess

use of io.automatiko.engine.workflow.process.executable.core.ExecutableProcess in project automatiko-engine by automatiko-io.

the class ProcessRuntimeImpl method initStartTimers.

public void initStartTimers() {
    Collection<Process> processes = this.processes.values();
    for (Process process : processes) {
        ExecutableProcess p = (ExecutableProcess) process;
        List<StartNode> startNodes = p.getTimerStart();
        if (startNodes != null && !startNodes.isEmpty()) {
            for (StartNode startNode : startNodes) {
                if (startNode != null && startNode.getTimer() != null) {
                    jobService.scheduleProcessJob(ProcessJobDescription.of(createTimerInstance(startNode.getTimer()), p.getId(), p.getVersion()));
                }
            }
        }
    }
}
Also used : StartNode(io.automatiko.engine.workflow.process.core.node.StartNode) Process(io.automatiko.engine.api.definition.process.Process) ExecutableProcess(io.automatiko.engine.workflow.process.executable.core.ExecutableProcess) ExecutableProcess(io.automatiko.engine.workflow.process.executable.core.ExecutableProcess)

Example 58 with ExecutableProcess

use of io.automatiko.engine.workflow.process.executable.core.ExecutableProcess in project automatiko-engine by automatiko-io.

the class CompensationEventListener method createNodeInstanceContainers.

private Stack<NodeInstance> createNodeInstanceContainers(Node toCompensateNode, boolean generalCompensation) {
    Stack<NodeContainer> nestedNodes = new Stack<NodeContainer>();
    Stack<NodeInstance> generatedInstances = new Stack<NodeInstance>();
    NodeContainer parentContainer = toCompensateNode.getParentContainer();
    while (!(parentContainer instanceof ExecutableProcess)) {
        nestedNodes.add(parentContainer);
        parentContainer = ((Node) parentContainer).getParentContainer();
    }
    NodeInstanceContainer parentInstance;
    if (nestedNodes.isEmpty()) {
        // nestedNodes is empty
        parentInstance = (NodeInstanceContainer) getProcessInstance();
    } else {
        parentInstance = (NodeInstanceContainer) ((WorkflowProcessInstanceImpl) getProcessInstance()).getNodeInstance((Node) nestedNodes.pop());
        generatedInstances.add((NodeInstance) parentInstance);
    }
    NodeInstanceContainer childInstance;
    while (!nestedNodes.isEmpty()) {
        // generate
        childInstance = (NodeInstanceContainer) parentInstance.getNodeInstance((Node) nestedNodes.pop());
        assert childInstance instanceof CompositeNodeInstance : "A node with child nodes should end up creating a CompositeNodeInstance type.";
        // track and modify
        generatedInstances.add((NodeInstance) childInstance);
        // loop
        parentInstance = childInstance;
    }
    if (generalCompensation) {
        childInstance = (NodeInstanceContainer) parentInstance.getNodeInstance(toCompensateNode);
        generatedInstances.add((NodeInstance) childInstance);
    }
    return generatedInstances;
}
Also used : NodeInstanceContainer(io.automatiko.engine.workflow.process.instance.NodeInstanceContainer) CompositeNodeInstance(io.automatiko.engine.workflow.process.instance.node.CompositeNodeInstance) NodeContainer(io.automatiko.engine.api.definition.process.NodeContainer) ExecutableProcess(io.automatiko.engine.workflow.process.executable.core.ExecutableProcess) NodeInstance(io.automatiko.engine.workflow.process.instance.NodeInstance) CompositeNodeInstance(io.automatiko.engine.workflow.process.instance.node.CompositeNodeInstance) Stack(java.util.Stack)

Aggregations

ExecutableProcess (io.automatiko.engine.workflow.process.executable.core.ExecutableProcess)58 ArrayList (java.util.ArrayList)29 Test (org.junit.jupiter.api.Test)29 StartNode (io.automatiko.engine.workflow.process.core.node.StartNode)28 EndNode (io.automatiko.engine.workflow.process.core.node.EndNode)26 AbstractBaseTest (io.automatiko.engine.workflow.test.util.AbstractBaseTest)23 ActionNode (io.automatiko.engine.workflow.process.core.node.ActionNode)20 InternalProcessRuntime (io.automatiko.engine.workflow.base.instance.InternalProcessRuntime)16 CompositeNode (io.automatiko.engine.workflow.process.core.node.CompositeNode)16 WorkItemNode (io.automatiko.engine.workflow.process.core.node.WorkItemNode)15 CompositeContextNode (io.automatiko.engine.workflow.process.core.node.CompositeContextNode)14 EventSubProcessNode (io.automatiko.engine.workflow.process.core.node.EventSubProcessNode)13 Node (io.automatiko.engine.workflow.process.core.Node)12 BoundaryEventNode (io.automatiko.engine.workflow.process.core.node.BoundaryEventNode)12 List (java.util.List)12 ProcessAction (io.automatiko.engine.workflow.process.core.ProcessAction)11 ConsequenceAction (io.automatiko.engine.workflow.process.core.impl.ConsequenceAction)11 EventTypeFilter (io.automatiko.engine.workflow.base.core.event.EventTypeFilter)10 ConnectionImpl (io.automatiko.engine.workflow.process.core.impl.ConnectionImpl)10 ProcessInstance (io.automatiko.engine.api.runtime.process.ProcessInstance)9