Search in sources :

Example 11 with EventTrigger

use of io.automatiko.engine.workflow.process.core.node.EventTrigger in project automatiko-engine by automatiko-io.

the class StartEventHandler method handleTimerNode.

protected void handleTimerNode(final Node node, final Element element, final String uri, final String localName, final ExtensibleXmlParser parser) throws SAXException {
    super.handleNode(node, element, uri, localName, parser);
    StartNode startNode = (StartNode) node;
    org.w3c.dom.Node xmlNode = element.getFirstChild();
    while (xmlNode != null) {
        String nodeName = xmlNode.getNodeName();
        if ("timerEventDefinition".equals(nodeName)) {
            Timer timer = new Timer();
            org.w3c.dom.Node subNode = xmlNode.getFirstChild();
            while (subNode instanceof Element) {
                String subNodeName = subNode.getNodeName();
                if ("timeCycle".equals(subNodeName)) {
                    String delay = subNode.getTextContent();
                    int index = delay.indexOf("###");
                    if (index != -1) {
                        String period = delay.substring(index + 3);
                        delay = delay.substring(0, index);
                        timer.setPeriod(period);
                    }
                    timer.setTimeType(Timer.TIME_CYCLE);
                    timer.setDelay(delay);
                    break;
                } else if ("timeDuration".equals(subNodeName)) {
                    String delay = subNode.getTextContent();
                    timer.setTimeType(Timer.TIME_DURATION);
                    timer.setDelay(delay);
                    break;
                } else if ("timeDate".equals(subNodeName)) {
                    String date = subNode.getTextContent();
                    timer.setTimeType(Timer.TIME_DATE);
                    timer.setDate(date);
                    break;
                }
                subNode = subNode.getNextSibling();
            }
            startNode.setTimer(timer);
            if (parser.getParent() instanceof EventSubProcessNode) {
                // handle timer on start events like normal (non rule) timers for event sub
                // process
                EventTrigger trigger = new EventTrigger();
                EventTypeFilter eventFilter = new EventTypeFilter();
                eventFilter.setType("Timer-" + ((EventSubProcessNode) parser.getParent()).getId());
                trigger.addEventFilter(eventFilter);
                String mapping = (String) startNode.getMetaData("TriggerMapping");
                if (mapping != null) {
                    trigger.addInMapping(mapping, "event");
                }
                startNode.addTrigger(trigger);
                ((EventSubProcessNode) parser.getParent()).addTimer(timer, new ConsequenceAction("java", ""));
            }
        }
        xmlNode = xmlNode.getNextSibling();
    }
}
Also used : StartNode(io.automatiko.engine.workflow.process.core.node.StartNode) NonAcceptingEventTypeFilter(io.automatiko.engine.workflow.base.core.event.NonAcceptingEventTypeFilter) EventTypeFilter(io.automatiko.engine.workflow.base.core.event.EventTypeFilter) Timer(io.automatiko.engine.workflow.base.core.timer.Timer) EventSubProcessNode(io.automatiko.engine.workflow.process.core.node.EventSubProcessNode) Element(org.w3c.dom.Element) ConsequenceAction(io.automatiko.engine.workflow.process.core.impl.ConsequenceAction) EventTrigger(io.automatiko.engine.workflow.process.core.node.EventTrigger)

Example 12 with EventTrigger

use of io.automatiko.engine.workflow.process.core.node.EventTrigger in project automatiko-engine by automatiko-io.

the class StartEventHandler method handleCompensationNode.

protected void handleCompensationNode(final StartNode startNode, final org.w3c.dom.Node xmlNode) {
    if (startNode.isInterrupting()) {
        logger.warn("Compensation Event Sub-Processes [" + startNode.getMetaData("UniqueId") + "] may not be specified as interrupting:" + " overriding attribute and setting to not-interrupting.");
    }
    startNode.setInterrupting(false);
    /**
     * From the BPMN2 spec, P.264: "For a Start Event: This Event "catches" the
     * compensation for an Event Sub-Process. No further information is required.
     * The Event Sub-Process will provide the id necessary to match the Compensation
     * Event with the Event that threw the compensation"
     *
     * In other words, the id of the Sub-Process containing this Event Sub-Process
     * is what should be used as the activityRef value in any Intermediate (throw)
     * or End compensation event that targets this particular Event Sub-Process.
     *
     * This is similar to the logic used for a Compensation Boundary Event: it's
     * signaled using the id of the activity to which the CBE is attached to.
     */
    String activityRef = ((Element) xmlNode).getAttribute("activityRef");
    if (activityRef != null && activityRef.length() > 0) {
        logger.warn("activityRef value [" + activityRef + "] on Start Event '" + startNode.getMetaData("UniqueId") + "' ignored per the BPMN2 specification.");
    }
    // so that this node will get processed in ProcessHandler.postProcessNodes(...)
    EventTrigger startTrigger = new EventTrigger();
    EventFilter eventFilter = new NonAcceptingEventTypeFilter();
    ((NonAcceptingEventTypeFilter) eventFilter).setType("Compensation");
    startTrigger.addEventFilter(eventFilter);
    List<Trigger> startTriggers = new ArrayList<>();
    startTriggers.add(startTrigger);
    startNode.setTriggers(startTriggers);
    String mapping = (String) startNode.getMetaData("TriggerMapping");
    if (mapping != null) {
        startTrigger.addInMapping(mapping, startNode.getOutMapping(mapping));
    }
}
Also used : Trigger(io.automatiko.engine.workflow.process.core.node.Trigger) ConstraintTrigger(io.automatiko.engine.workflow.process.core.node.ConstraintTrigger) EventTrigger(io.automatiko.engine.workflow.process.core.node.EventTrigger) Element(org.w3c.dom.Element) ArrayList(java.util.ArrayList) NonAcceptingEventTypeFilter(io.automatiko.engine.workflow.base.core.event.NonAcceptingEventTypeFilter) EventFilter(io.automatiko.engine.workflow.base.core.event.EventFilter) EventTrigger(io.automatiko.engine.workflow.process.core.node.EventTrigger)

Example 13 with EventTrigger

use of io.automatiko.engine.workflow.process.core.node.EventTrigger in project automatiko-engine by automatiko-io.

the class XmlBPMNProcessDumper method visitInterfaces.

protected void visitInterfaces(Node[] nodes, StringBuilder xmlDump) {
    for (Node node : nodes) {
        if (node instanceof WorkItemNode) {
            Work work = ((WorkItemNode) node).getWork();
            if (work != null) {
                if ("Service Task".equals(work.getName())) {
                    String interfaceName = (String) work.getParameter("Interface");
                    if (interfaceName == null) {
                        interfaceName = "";
                    }
                    String interfaceRef = (String) work.getParameter("interfaceImplementationRef");
                    if (interfaceRef == null) {
                        interfaceRef = "";
                    }
                    String operationName = (String) work.getParameter("Operation");
                    if (operationName == null) {
                        operationName = "";
                    }
                    String operationRef = (String) work.getParameter("operationImplementationRef");
                    if (operationRef == null) {
                        operationRef = "";
                    }
                    String parameterType = (String) work.getParameter("ParameterType");
                    if (parameterType == null) {
                        parameterType = "";
                    }
                    xmlDump.append("  <itemDefinition id=\"" + getUniqueNodeId(node) + "_InMessageType\" " + ("".equals(parameterType) || "java.lang.Object".equals(parameterType) ? "" : "structureRef=\"" + parameterType + "\" ") + "/>" + EOL + "  <message id=\"" + getUniqueNodeId(node) + "_InMessage\" itemRef=\"" + getUniqueNodeId(node) + "_InMessageType\" />" + EOL + "  <interface id=\"" + getUniqueNodeId(node) + "_ServiceInterface\" name=\"" + interfaceName + "\" implementationRef=\"" + interfaceRef + "\" >" + EOL + "    <operation id=\"" + getUniqueNodeId(node) + "_ServiceOperation\" name=\"" + operationName + "\" implementationRef=\"" + operationRef + "\" >" + EOL + "      <inMessageRef>" + getUniqueNodeId(node) + "_InMessage</inMessageRef>" + EOL + "    </operation>" + EOL + "  </interface>" + EOL + EOL);
                } else if ("Send Task".equals(work.getName())) {
                    String messageType = (String) work.getParameter("MessageType");
                    if (messageType == null) {
                        messageType = "";
                    }
                    xmlDump.append("  <itemDefinition id=\"" + getUniqueNodeId(node) + "_MessageType\" " + ("".equals(messageType) || "java.lang.Object".equals(messageType) ? "" : "structureRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(messageType) + "\" ") + "/>" + EOL + "  <message id=\"" + getUniqueNodeId(node) + "_Message\" itemRef=\"" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
                } else if ("Receive Task".equals(work.getName())) {
                    String messageId = (String) work.getParameter("MessageId");
                    String messageType = (String) work.getParameter("MessageType");
                    if (messageType == null) {
                        messageType = "";
                    }
                    xmlDump.append("  <itemDefinition id=\"" + getUniqueNodeId(node) + "_MessageType\" " + ("".equals(messageType) || "java.lang.Object".equals(messageType) ? "" : "structureRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(messageType) + "\" ") + "/>" + EOL + "  <message id=\"" + messageId + "\" itemRef=\"" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
                }
            }
        } else if (node instanceof EndNode) {
            String messageType = (String) node.getMetaData().get("MessageType");
            if (messageType != null) {
                xmlDump.append("  <itemDefinition id=\"" + getUniqueNodeId(node) + "_MessageType\" " + ("".equals(messageType) || "java.lang.Object".equals(messageType) ? "" : "structureRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(messageType) + "\" ") + "/>" + EOL + "  <message id=\"" + getUniqueNodeId(node) + "_Message\" itemRef=\"" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
            }
        } else if (node instanceof ActionNode) {
            String messageType = (String) node.getMetaData().get("MessageType");
            if (messageType != null) {
                xmlDump.append("  <itemDefinition id=\"" + getUniqueNodeId(node) + "_MessageType\" " + ("".equals(messageType) || "java.lang.Object".equals(messageType) ? "" : "structureRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(messageType) + "\" ") + "/>" + EOL + "  <message id=\"" + getUniqueNodeId(node) + "_Message\" itemRef=\"" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
            }
        } else if (node instanceof EventNode) {
            List<EventFilter> filters = ((EventNode) node).getEventFilters();
            if (filters.size() > 0) {
                String messageRef = ((EventTypeFilter) filters.get(0)).getType();
                if (messageRef.startsWith("Message-")) {
                    messageRef = messageRef.substring(8);
                    String messageType = (String) node.getMetaData().get("MessageType");
                    xmlDump.append("  <itemDefinition id=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(messageRef) + "Type\" " + ("".equals(messageType) || "java.lang.Object".equals(messageType) ? "" : "structureRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(messageType) + "\" ") + "/>" + EOL + "  <message id=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(messageRef) + "\" itemRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(messageRef) + "Type\" />" + EOL + EOL);
                }
            }
        } else if (node instanceof StartNode) {
            StartNode startNode = (StartNode) node;
            if (startNode.getTriggers() != null && !startNode.getTriggers().isEmpty()) {
                Trigger trigger = startNode.getTriggers().get(0);
                if (trigger instanceof EventTrigger) {
                    String eventType = ((EventTypeFilter) ((EventTrigger) trigger).getEventFilters().get(0)).getType();
                    if (eventType.startsWith("Message-")) {
                        eventType = eventType.substring(8);
                        String messageType = (String) node.getMetaData().get("MessageType");
                        xmlDump.append("  <itemDefinition id=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(eventType) + "Type\" " + ("".equals(messageType) || "java.lang.Object".equals(messageType) ? "" : "structureRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(messageType) + "\" ") + "/>" + EOL + "  <message id=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(eventType) + "\" itemRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(eventType) + "Type\" />" + EOL + EOL);
                    }
                }
            }
        } else if (node instanceof ForEachNode) {
            ForEachNode forEachNode = (ForEachNode) node;
            String type = null;
            if (forEachNode.getVariableType() instanceof ObjectDataType) {
                type = ((ObjectDataType) forEachNode.getVariableType()).getClassName();
            }
            xmlDump.append("  <itemDefinition id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_multiInstanceItemType\" " + (type == null || "java.lang.Object".equals(type) ? "" : "structureRef=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(type) + "\" ") + "/>" + EOL + EOL);
        }
        if (node instanceof CompositeNode) {
            visitInterfaces(((CompositeNode) node).getNodes(), xmlDump);
        }
    }
}
Also used : StartNode(io.automatiko.engine.workflow.process.core.node.StartNode) ActionNode(io.automatiko.engine.workflow.process.core.node.ActionNode) FaultNode(io.automatiko.engine.workflow.process.core.node.FaultNode) WorkItemNode(io.automatiko.engine.workflow.process.core.node.WorkItemNode) CompositeNode(io.automatiko.engine.workflow.process.core.node.CompositeNode) Node(io.automatiko.engine.api.definition.process.Node) HumanTaskNode(io.automatiko.engine.workflow.process.core.node.HumanTaskNode) ForEachNode(io.automatiko.engine.workflow.process.core.node.ForEachNode) StartNode(io.automatiko.engine.workflow.process.core.node.StartNode) EndNode(io.automatiko.engine.workflow.process.core.node.EndNode) EventNode(io.automatiko.engine.workflow.process.core.node.EventNode) ActionNode(io.automatiko.engine.workflow.process.core.node.ActionNode) ObjectDataType(io.automatiko.engine.workflow.base.core.datatype.impl.type.ObjectDataType) EventNode(io.automatiko.engine.workflow.process.core.node.EventNode) EventTypeFilter(io.automatiko.engine.workflow.base.core.event.EventTypeFilter) CompositeNode(io.automatiko.engine.workflow.process.core.node.CompositeNode) Trigger(io.automatiko.engine.workflow.process.core.node.Trigger) EventTrigger(io.automatiko.engine.workflow.process.core.node.EventTrigger) EndNode(io.automatiko.engine.workflow.process.core.node.EndNode) WorkItemNode(io.automatiko.engine.workflow.process.core.node.WorkItemNode) Work(io.automatiko.engine.workflow.base.core.Work) List(java.util.List) ArrayList(java.util.ArrayList) ForEachNode(io.automatiko.engine.workflow.process.core.node.ForEachNode) EventTrigger(io.automatiko.engine.workflow.process.core.node.EventTrigger)

Example 14 with EventTrigger

use of io.automatiko.engine.workflow.process.core.node.EventTrigger in project automatiko-engine by automatiko-io.

the class ProcessEventSupportTest method testProcessEventListenerWithStartEvent.

@Test
public void testProcessEventListenerWithStartEvent() throws Exception {
    ExecutableProcess process = new ExecutableProcess();
    process.setId("org.company.core.process.event");
    process.setName("Event Process");
    StartNode startNode = new StartNode();
    startNode.setName("Start");
    startNode.setId(1);
    EventTrigger trigger = new EventTrigger();
    EventTypeFilter eventFilter = new EventTypeFilter();
    eventFilter.setType("signal");
    trigger.addEventFilter(eventFilter);
    startNode.addTrigger(trigger);
    process.addNode(startNode);
    ActionNode actionNode = new ActionNode();
    actionNode.setName("Print");
    ProcessAction action = new ConsequenceAction("java", null);
    action.setMetaData("Action", new Action() {

        public void execute(ProcessContext context) throws Exception {
            logger.info("Executed action");
        }
    });
    actionNode.setAction(action);
    actionNode.setId(2);
    process.addNode(actionNode);
    new ConnectionImpl(startNode, Node.CONNECTION_DEFAULT_TYPE, actionNode, Node.CONNECTION_DEFAULT_TYPE);
    EndNode endNode = new EndNode();
    endNode.setName("End");
    endNode.setId(3);
    process.addNode(endNode);
    new ConnectionImpl(actionNode, Node.CONNECTION_DEFAULT_TYPE, endNode, Node.CONNECTION_DEFAULT_TYPE);
    InternalProcessRuntime processRuntime = new ProcessRuntimeImpl(Collections.singletonMap(process.getId(), process));
    final List<ProcessEvent> processEventList = new ArrayList<ProcessEvent>();
    final ProcessEventListener processEventListener = new ProcessEventListener() {

        public void afterNodeLeft(ProcessNodeLeftEvent event) {
            processEventList.add(event);
        }

        public void afterNodeTriggered(ProcessNodeTriggeredEvent event) {
            processEventList.add(event);
        }

        public void afterProcessCompleted(ProcessCompletedEvent event) {
            processEventList.add(event);
        }

        public void afterProcessStarted(ProcessStartedEvent event) {
            processEventList.add(event);
        }

        public void beforeNodeLeft(ProcessNodeLeftEvent event) {
            processEventList.add(event);
        }

        public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) {
            processEventList.add(event);
        }

        public void beforeProcessCompleted(ProcessCompletedEvent event) {
            processEventList.add(event);
        }

        public void beforeProcessStarted(ProcessStartedEvent event) {
            processEventList.add(event);
        }

        public void beforeVariableChanged(ProcessVariableChangedEvent event) {
            processEventList.add(event);
        }

        public void afterVariableChanged(ProcessVariableChangedEvent event) {
            processEventList.add(event);
        }
    };
    processRuntime.addEventListener(processEventListener);
    // execute the process
    // session.startProcess("org.company.core.process.event");
    processRuntime.signalEvent("signal", null);
    assertEquals(16, processEventList.size());
    assertEquals("org.company.core.process.event", ((ProcessStartedEvent) processEventList.get(0)).getProcessInstance().getProcessId());
    assertEquals("Start", ((ProcessNodeTriggeredEvent) processEventList.get(1)).getNodeInstance().getNodeName());
    assertEquals("Start", ((ProcessNodeLeftEvent) processEventList.get(2)).getNodeInstance().getNodeName());
    assertEquals("Print", ((ProcessNodeTriggeredEvent) processEventList.get(3)).getNodeInstance().getNodeName());
    assertEquals("Print", ((ProcessNodeLeftEvent) processEventList.get(4)).getNodeInstance().getNodeName());
    assertEquals("End", ((ProcessNodeTriggeredEvent) processEventList.get(5)).getNodeInstance().getNodeName());
    assertEquals("End", ((ProcessNodeLeftEvent) processEventList.get(6)).getNodeInstance().getNodeName());
    assertEquals("org.company.core.process.event", ((ProcessCompletedEvent) processEventList.get(7)).getProcessInstance().getProcessId());
    assertEquals("org.company.core.process.event", ((ProcessCompletedEvent) processEventList.get(8)).getProcessInstance().getProcessId());
    assertEquals("End", ((ProcessNodeLeftEvent) processEventList.get(9)).getNodeInstance().getNodeName());
    assertEquals("End", ((ProcessNodeTriggeredEvent) processEventList.get(10)).getNodeInstance().getNodeName());
    assertEquals("Print", ((ProcessNodeLeftEvent) processEventList.get(11)).getNodeInstance().getNodeName());
    assertEquals("Print", ((ProcessNodeTriggeredEvent) processEventList.get(12)).getNodeInstance().getNodeName());
    assertEquals("Start", ((ProcessNodeLeftEvent) processEventList.get(13)).getNodeInstance().getNodeName());
    assertEquals("Start", ((ProcessNodeTriggeredEvent) processEventList.get(14)).getNodeInstance().getNodeName());
    assertEquals("org.company.core.process.event", ((ProcessStartedEvent) processEventList.get(15)).getProcessInstance().getProcessId());
}
Also used : ProcessAction(io.automatiko.engine.workflow.process.core.ProcessAction) ProcessVariableChangedEvent(io.automatiko.engine.api.event.process.ProcessVariableChangedEvent) StartNode(io.automatiko.engine.workflow.process.core.node.StartNode) Action(io.automatiko.engine.workflow.base.instance.impl.Action) ProcessAction(io.automatiko.engine.workflow.process.core.ProcessAction) ConsequenceAction(io.automatiko.engine.workflow.process.core.impl.ConsequenceAction) ProcessEvent(io.automatiko.engine.api.event.process.ProcessEvent) ConsequenceAction(io.automatiko.engine.workflow.process.core.impl.ConsequenceAction) ProcessEventListener(io.automatiko.engine.api.event.process.ProcessEventListener) ActionNode(io.automatiko.engine.workflow.process.core.node.ActionNode) ProcessRuntimeImpl(io.automatiko.engine.workflow.base.instance.ProcessRuntimeImpl) ArrayList(java.util.ArrayList) ProcessStartedEvent(io.automatiko.engine.api.event.process.ProcessStartedEvent) ConnectionImpl(io.automatiko.engine.workflow.process.core.impl.ConnectionImpl) ProcessCompletedEvent(io.automatiko.engine.api.event.process.ProcessCompletedEvent) ProcessContext(io.automatiko.engine.api.runtime.process.ProcessContext) EventTypeFilter(io.automatiko.engine.workflow.base.core.event.EventTypeFilter) EndNode(io.automatiko.engine.workflow.process.core.node.EndNode) ProcessNodeTriggeredEvent(io.automatiko.engine.api.event.process.ProcessNodeTriggeredEvent) ExecutableProcess(io.automatiko.engine.workflow.process.executable.core.ExecutableProcess) InternalProcessRuntime(io.automatiko.engine.workflow.base.instance.InternalProcessRuntime) ProcessNodeLeftEvent(io.automatiko.engine.api.event.process.ProcessNodeLeftEvent) EventTrigger(io.automatiko.engine.workflow.process.core.node.EventTrigger) AbstractBaseTest(io.automatiko.engine.workflow.test.util.AbstractBaseTest) Test(org.junit.jupiter.api.Test)

Example 15 with EventTrigger

use of io.automatiko.engine.workflow.process.core.node.EventTrigger in project automatiko-engine by automatiko-io.

the class ServerlessWorkflowFactory method messageStartNode.

public StartNode messageStartNode(long id, EventDefinition eventDefinition, OnEvents onEvents, NodeContainer nodeContainer) {
    StartNode startNode = new StartNode();
    startNode.setId(id);
    startNode.setName(eventDefinition.getName());
    startNode.setMetaData(Metadata.TRIGGER_MAPPING, DEFAULT_WORKFLOW_VAR);
    startNode.setMetaData(Metadata.TRIGGER_TYPE, "ConsumeMessage");
    // if (ServerlessWorkflowUtils.correlationExpressionFromSource(eventDefinition.getSource()) != null) {
    // startNode.setMetaData(Metadata.TRIGGER_CORRELATION_EXPR,
    // ServerlessWorkflowUtils.correlationExpressionFromSource(eventDefinition.getSource()));
    // }
    startNode.setMetaData(Metadata.TRIGGER_REF, eventDefinition.getName());
    startNode.setMetaData(Metadata.MESSAGE_TYPE, JSON_NODE);
    if (eventDefinition.getCorrelation() != null && !eventDefinition.getCorrelation().isEmpty()) {
        startNode.setMetaData("TriggerCorrelationExpr", "extensionAttribute(eventData, \"" + eventDefinition.getCorrelation().get(0).getContextAttributeName() + "\")");
        startNode.setMetaData("acceptStartSignal", "true");
    }
    startNode.setMetaData(Metadata.TRIGGER_FILTER_EXPR, "hasAttributeWithValue(eventData, \"type\", \"" + eventDefinition.getType() + "\")");
    EventTrigger trigger = new EventTrigger();
    EventTypeFilter eventFilter = new EventTypeFilter();
    eventFilter.setType("Message-" + eventDefinition.getName());
    trigger.addEventFilter(eventFilter);
    String mapping = (String) startNode.getMetaData(Metadata.TRIGGER_MAPPING);
    if (mapping != null) {
        trigger.addInMapping(mapping, startNode.getOutMapping(mapping));
    }
    startNode.addTrigger(trigger);
    startNode.setMetaData(UNIQUE_ID_PARAM, Long.toString(id));
    if (eventDefinition.getMetadata() != null) {
        eventDefinition.getMetadata().forEach((k, v) -> startNode.setMetaData(k, v));
    }
    // if (ServerlessWorkflowUtils.correlationExpressionFromSource(eventDefinition.getSource()) != null) {
    // eventNode.setMetaData(Metadata.TRIGGER_CORRELATION_EXPR,
    // ServerlessWorkflowUtils.correlationExpressionFromSource(eventDefinition.getSource()));
    // }
    boolean useData = true;
    String outputFilter = null;
    String scopeFilter = null;
    if (onEvents.getEventDataFilter() != null) {
        useData = onEvents.getEventDataFilter().isUseData();
        outputFilter = unwrapExpression(onEvents.getEventDataFilter().getData());
        scopeFilter = unwrapExpression(onEvents.getEventDataFilter().getToStateData());
    }
    if (useData) {
        Assignment outAssignment = new Assignment("jq", null, null);
        outAssignment.setMetaData("Action", new TaskOutputJqAssignmentAction(outputFilter, scopeFilter, true));
        startNode.addOutAssociation(new DataAssociation(Collections.emptyList(), "", Arrays.asList(outAssignment), null));
    }
    nodeContainer.addNode(startNode);
    return startNode;
}
Also used : Assignment(io.automatiko.engine.workflow.process.core.node.Assignment) StartNode(io.automatiko.engine.workflow.process.core.node.StartNode) EventTypeFilter(io.automatiko.engine.workflow.base.core.event.EventTypeFilter) DataAssociation(io.automatiko.engine.workflow.process.core.node.DataAssociation) EventTrigger(io.automatiko.engine.workflow.process.core.node.EventTrigger) TaskOutputJqAssignmentAction(io.automatiko.engine.workflow.base.instance.impl.jq.TaskOutputJqAssignmentAction)

Aggregations

EventTrigger (io.automatiko.engine.workflow.process.core.node.EventTrigger)19 EventTypeFilter (io.automatiko.engine.workflow.base.core.event.EventTypeFilter)15 StartNode (io.automatiko.engine.workflow.process.core.node.StartNode)12 Trigger (io.automatiko.engine.workflow.process.core.node.Trigger)11 EventFilter (io.automatiko.engine.workflow.base.core.event.EventFilter)8 Node (io.automatiko.engine.api.definition.process.Node)6 ConstraintTrigger (io.automatiko.engine.workflow.process.core.node.ConstraintTrigger)6 ArrayList (java.util.ArrayList)6 ConsequenceAction (io.automatiko.engine.workflow.process.core.impl.ConsequenceAction)5 ActionNode (io.automatiko.engine.workflow.process.core.node.ActionNode)5 EndNode (io.automatiko.engine.workflow.process.core.node.EndNode)5 EventSubProcessNode (io.automatiko.engine.workflow.process.core.node.EventSubProcessNode)5 ExecutableProcess (io.automatiko.engine.workflow.process.executable.core.ExecutableProcess)5 NodeContainer (io.automatiko.engine.api.definition.process.NodeContainer)4 List (java.util.List)4 NonAcceptingEventTypeFilter (io.automatiko.engine.workflow.base.core.event.NonAcceptingEventTypeFilter)3 Timer (io.automatiko.engine.workflow.base.core.timer.Timer)3 ProcessAction (io.automatiko.engine.workflow.process.core.ProcessAction)3 EventNode (io.automatiko.engine.workflow.process.core.node.EventNode)3 WorkItemNode (io.automatiko.engine.workflow.process.core.node.WorkItemNode)3