Search in sources :

Example 6 with Expression

use of org.jbpm.bpmn2.core.Expression in project jbpm by kiegroup.

the class AdHocSubProcessHandler method handleNode.

@SuppressWarnings("unchecked")
protected void handleNode(final Node node, final Element element, final String uri, final String localName, final ExtensibleXmlParser parser) throws SAXException {
    super.handleNode(node, element, uri, localName, parser);
    DynamicNode dynamicNode = (DynamicNode) node;
    String cancelRemainingInstances = element.getAttribute("cancelRemainingInstances");
    if ("false".equals(cancelRemainingInstances)) {
        dynamicNode.setCancelRemainingInstances(false);
    }
    // by default it should not autocomplete as it's adhoc
    dynamicNode.setAutoComplete(false);
    dynamicNode.setActivationExpression((String) dynamicNode.getMetaData("customActivationCondition"));
    org.w3c.dom.Node xmlNode = element.getFirstChild();
    while (xmlNode != null) {
        String nodeName = xmlNode.getNodeName();
        if ("completionCondition".equals(nodeName)) {
            String expression = xmlNode.getTextContent();
            if (AUTOCOMPLETE_EXPRESSIONS.contains(expression)) {
                dynamicNode.setAutoComplete(true);
            } else {
                dynamicNode.setCompletionExpression(expression == null ? "" : expression);
            }
            org.w3c.dom.Node languageNode = xmlNode.getAttributes().getNamedItem("language");
            if (languageNode != null) {
                String language = languageNode.getNodeValue();
                if (XmlBPMNProcessDumper.MVEL_LANGUAGE.equals(language)) {
                    dynamicNode.setLanguage("mvel");
                } else if (XmlBPMNProcessDumper.RULE_LANGUAGE.equals(language)) {
                    dynamicNode.setLanguage("rule");
                } else {
                    throw new IllegalArgumentException("Unknown language " + language);
                }
            } else {
                dynamicNode.setLanguage("mvel");
            }
        }
        xmlNode = xmlNode.getNextSibling();
    }
    List<SequenceFlow> connections = (List<SequenceFlow>) dynamicNode.getMetaData(ProcessHandler.CONNECTIONS);
    ProcessHandler.linkConnections(dynamicNode, connections);
    ProcessHandler.linkBoundaryEvents(dynamicNode);
    handleScript(dynamicNode, element, "onEntry");
    handleScript(dynamicNode, element, "onExit");
}
Also used : SequenceFlow(org.jbpm.bpmn2.core.SequenceFlow) DynamicNode(org.jbpm.workflow.core.node.DynamicNode) List(java.util.List)

Example 7 with Expression

use of org.jbpm.bpmn2.core.Expression in project kogito-runtimes by kiegroup.

the class AdHocSubProcessHandler method handleNode.

@SuppressWarnings("unchecked")
@Override
protected Node handleNode(final Node node, final Element element, final String uri, final String localName, final ExtensibleXmlParser parser) throws SAXException {
    super.handleNode(node, element, uri, localName, parser);
    DynamicNode dynamicNode = (DynamicNode) node;
    String cancelRemainingInstances = element.getAttribute("cancelRemainingInstances");
    if ("false".equals(cancelRemainingInstances)) {
        dynamicNode.setCancelRemainingInstances(false);
    }
    // by default it should not autocomplete as it's adhoc
    org.w3c.dom.Node xmlNode = element.getFirstChild();
    dynamicNode.setActivationCondition((String) node.getMetaData().get(CUSTOM_ACTIVATION_CONDITION));
    while (xmlNode != null) {
        String nodeName = xmlNode.getNodeName();
        if (COMPLETION_CONDITION.equals(nodeName)) {
            String expression = xmlNode.getTextContent();
            if (AUTOCOMPLETE_EXPRESSIONS.contains(expression)) {
                dynamicNode.setAutoComplete(true);
            } else {
                dynamicNode.setCompletionCondition(expression);
            }
        }
        xmlNode = xmlNode.getNextSibling();
    }
    List<SequenceFlow> connections = (List<SequenceFlow>) dynamicNode.getMetaData(ProcessHandler.CONNECTIONS);
    ProcessHandler.linkConnections(dynamicNode, connections);
    ProcessHandler.linkBoundaryEvents(dynamicNode);
    handleScript(dynamicNode, element, "onEntry");
    handleScript(dynamicNode, element, "onExit");
    return node;
}
Also used : SequenceFlow(org.jbpm.bpmn2.core.SequenceFlow) DynamicNode(org.jbpm.workflow.core.node.DynamicNode) List(java.util.List)

Example 8 with Expression

use of org.jbpm.bpmn2.core.Expression in project jbpm by kiegroup.

the class SequenceFlowHandler method end.

public Object end(final String uri, final String localName, final ExtensibleXmlParser parser) throws SAXException {
    final Element element = parser.endElementBuilder();
    SequenceFlow sequenceFlow = (SequenceFlow) parser.getCurrent();
    org.w3c.dom.Node xmlNode = element.getFirstChild();
    while (xmlNode != null) {
        String nodeName = xmlNode.getNodeName();
        if ("conditionExpression".equals(nodeName)) {
            String expression = xmlNode.getTextContent();
            org.w3c.dom.Node languageNode = xmlNode.getAttributes().getNamedItem("language");
            if (languageNode != null) {
                String language = languageNode.getNodeValue();
                if (XmlBPMNProcessDumper.JAVA_LANGUAGE.equals(language)) {
                    sequenceFlow.setLanguage("java");
                } else if (XmlBPMNProcessDumper.MVEL_LANGUAGE.equals(language)) {
                    sequenceFlow.setLanguage("mvel");
                } else if (XmlBPMNProcessDumper.RULE_LANGUAGE.equals(language)) {
                    sequenceFlow.setType("rule");
                } else if (XmlBPMNProcessDumper.XPATH_LANGUAGE.equals(language)) {
                    sequenceFlow.setLanguage("XPath");
                } else if (XmlBPMNProcessDumper.JAVASCRIPT_LANGUAGE.equals(language)) {
                    sequenceFlow.setLanguage("JavaScript");
                } else if (XmlBPMNProcessDumper.FEEL_LANGUAGE.equals(language)) {
                    sequenceFlow.setLanguage("FEEL");
                } else {
                    throw new IllegalArgumentException("Unknown language " + language);
                }
            }
            sequenceFlow.setExpression(expression);
        }
        xmlNode = xmlNode.getNextSibling();
    }
    return sequenceFlow;
}
Also used : SequenceFlow(org.jbpm.bpmn2.core.SequenceFlow) Element(org.w3c.dom.Element)

Example 9 with Expression

use of org.jbpm.bpmn2.core.Expression in project jbpm by kiegroup.

the class AbstractNodeHandler method readMultiInstanceLoopCharacteristics.

@SuppressWarnings("unchecked")
protected void readMultiInstanceLoopCharacteristics(org.w3c.dom.Node xmlNode, ForEachNode forEachNode, ExtensibleXmlParser parser) {
    // sourceRef
    org.w3c.dom.Node subNode = xmlNode.getFirstChild();
    while (subNode != null) {
        String nodeName = subNode.getNodeName();
        if ("inputDataItem".equals(nodeName)) {
            String variableName = ((Element) subNode).getAttribute("id");
            String itemSubjectRef = ((Element) subNode).getAttribute("itemSubjectRef");
            DataType dataType = null;
            Map<String, ItemDefinition> itemDefinitions = (Map<String, ItemDefinition>) ((ProcessBuildData) parser.getData()).getMetaData("ItemDefinitions");
            dataType = getDataType(itemSubjectRef, itemDefinitions, parser.getClassLoader());
            if (variableName != null && variableName.trim().length() > 0) {
                forEachNode.setVariable(variableName, dataType);
            }
        } else if ("outputDataItem".equals(nodeName)) {
            String variableName = ((Element) subNode).getAttribute("id");
            String itemSubjectRef = ((Element) subNode).getAttribute("itemSubjectRef");
            DataType dataType = null;
            Map<String, ItemDefinition> itemDefinitions = (Map<String, ItemDefinition>) ((ProcessBuildData) parser.getData()).getMetaData("ItemDefinitions");
            dataType = getDataType(itemSubjectRef, itemDefinitions, parser.getClassLoader());
            if (variableName != null && variableName.trim().length() > 0) {
                forEachNode.setOutputVariable(variableName, dataType);
            }
        } else if ("loopDataOutputRef".equals(nodeName)) {
            String outputDataRef = ((Element) subNode).getTextContent();
            if (outputDataRef != null && outputDataRef.trim().length() > 0) {
                String collectionName = outputAssociation.get(outputDataRef);
                if (collectionName == null) {
                    collectionName = dataOutputs.get(outputDataRef);
                }
                forEachNode.setOutputCollectionExpression(collectionName);
            }
            forEachNode.setMetaData("MICollectionOutput", outputDataRef);
        } else if ("loopDataInputRef".equals(nodeName)) {
            String inputDataRef = ((Element) subNode).getTextContent();
            if (inputDataRef != null && inputDataRef.trim().length() > 0) {
                String collectionName = inputAssociation.get(inputDataRef);
                if (collectionName == null) {
                    collectionName = dataInputs.get(inputDataRef);
                }
                forEachNode.setCollectionExpression(collectionName);
            }
            forEachNode.setMetaData("MICollectionInput", inputDataRef);
        } else if ("completionCondition".equals(nodeName)) {
            String expression = subNode.getTextContent();
            forEachNode.setCompletionConditionExpression(expression);
        }
        subNode = subNode.getNextSibling();
    }
}
Also used : ProcessBuildData(org.jbpm.compiler.xml.ProcessBuildData) Element(org.w3c.dom.Element) ItemDefinition(org.jbpm.bpmn2.core.ItemDefinition) ObjectDataType(org.jbpm.process.core.datatype.impl.type.ObjectDataType) IntegerDataType(org.jbpm.process.core.datatype.impl.type.IntegerDataType) FloatDataType(org.jbpm.process.core.datatype.impl.type.FloatDataType) DataType(org.jbpm.process.core.datatype.DataType) StringDataType(org.jbpm.process.core.datatype.impl.type.StringDataType) BooleanDataType(org.jbpm.process.core.datatype.impl.type.BooleanDataType) HashMap(java.util.HashMap) Map(java.util.Map)

Example 10 with Expression

use of org.jbpm.bpmn2.core.Expression in project kogito-runtimes by kiegroup.

the class ProcessHandler method postProcessCollaborations.

private void postProcessCollaborations(RuleFlowProcess process, ExtensibleXmlParser parser) {
    // now we wire correlation process subscriptions
    CorrelationManager correlationManager = process.getCorrelationManager();
    for (Message message : HandlerUtil.messages(parser).values()) {
        correlationManager.newMessage(message.getId(), message.getName(), message.getType());
    }
    // only the ones this process is member of
    List<Collaboration> collaborations = HandlerUtil.collaborations(parser).values().stream().filter(c -> c.getProcessesRef().contains(process.getId())).collect(Collectors.toList());
    for (Collaboration collaboration : collaborations) {
        for (CorrelationKey key : collaboration.getCorrelationKeys()) {
            correlationManager.newCorrelation(key.getId(), key.getName());
            List<CorrelationProperty> properties = key.getPropertiesRef().stream().map(k -> HandlerUtil.correlationProperties(parser).get(k)).collect(Collectors.toList());
            for (CorrelationProperty correlationProperty : properties) {
                correlationProperty.getMessageRefs().forEach(messageRef -> {
                    // for now only MVEL expressions
                    MVELMessageExpressionEvaluator evaluator = new MVELMessageExpressionEvaluator(correlationProperty.getRetrievalExpression(messageRef).getScript());
                    correlationManager.addMessagePropertyExpression(key.getId(), messageRef, correlationProperty.getId(), evaluator);
                });
            }
        }
    }
    // we create the correlations
    for (CorrelationSubscription subscription : HandlerUtil.correlationSubscription(process).values()) {
        correlationManager.subscribeTo(subscription.getCorrelationKeyRef());
        for (Map.Entry<String, Expression> binding : subscription.getPropertyExpressions().entrySet()) {
            MVELMessageExpressionEvaluator evaluator = new MVELMessageExpressionEvaluator(binding.getValue().getScript());
            correlationManager.addProcessSubscriptionPropertyExpression(subscription.getCorrelationKeyRef(), binding.getKey(), evaluator);
        }
    }
}
Also used : EventFilter(org.jbpm.process.core.event.EventFilter) ConstraintTrigger(org.jbpm.workflow.core.node.ConstraintTrigger) CorrelationManager(org.jbpm.process.core.correlation.CorrelationManager) HumanTaskNode(org.jbpm.workflow.core.node.HumanTaskNode) SequenceFlow(org.jbpm.bpmn2.core.SequenceFlow) LoggerFactory(org.slf4j.LoggerFactory) BoundaryEventNode(org.jbpm.workflow.core.node.BoundaryEventNode) StartNode(org.jbpm.workflow.core.node.StartNode) CorrelationProperty(org.jbpm.bpmn2.core.CorrelationProperty) RuleFlowProcessValidator(org.jbpm.ruleflow.core.validation.RuleFlowProcessValidator) NodeImpl(org.jbpm.workflow.core.impl.NodeImpl) CompositeNode(org.jbpm.workflow.core.node.CompositeNode) DroolsConsequenceAction(org.jbpm.workflow.core.impl.DroolsConsequenceAction) ItemDefinition(org.jbpm.bpmn2.core.ItemDefinition) Constraint(org.jbpm.workflow.core.Constraint) ExtensibleXmlParser(org.drools.core.xml.ExtensibleXmlParser) Association(org.jbpm.bpmn2.core.Association) Connection(org.jbpm.workflow.core.Connection) StateNode(org.jbpm.workflow.core.node.StateNode) ProcessBuildData(org.jbpm.compiler.xml.ProcessBuildData) RuleSetNode(org.jbpm.workflow.core.node.RuleSetNode) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Map(java.util.Map) Signal(org.jbpm.bpmn2.core.Signal) CancelNodeInstanceAction(org.jbpm.process.instance.impl.actions.CancelNodeInstanceAction) SubProcessNode(org.jbpm.workflow.core.node.SubProcessNode) EventTrigger(org.jbpm.workflow.core.node.EventTrigger) CompositeContextNode(org.jbpm.workflow.core.node.CompositeContextNode) Collaboration(org.jbpm.bpmn2.core.Collaboration) Collection(java.util.Collection) Process(org.kie.api.definition.process.Process) VariableScope(org.jbpm.process.core.context.variable.VariableScope) KogitoNode(org.kie.kogito.internal.process.runtime.KogitoNode) Collectors(java.util.stream.Collectors) IntermediateLink(org.jbpm.bpmn2.core.IntermediateLink) ActionExceptionHandler(org.jbpm.process.core.context.exception.ActionExceptionHandler) Message(org.jbpm.bpmn2.core.Message) List(java.util.List) Error(org.jbpm.bpmn2.core.Error) Stream(java.util.stream.Stream) ContextContainer(org.jbpm.process.core.ContextContainer) EventTypeFilter(org.jbpm.process.core.event.EventTypeFilter) SAXException(org.xml.sax.SAXException) CorrelationKey(org.jbpm.bpmn2.core.CorrelationKey) ProcessInstanceCompensationAction(org.jbpm.process.instance.impl.actions.ProcessInstanceCompensationAction) Trigger(org.jbpm.workflow.core.node.Trigger) NodeContainer(org.kie.api.definition.process.NodeContainer) DataStore(org.jbpm.bpmn2.core.DataStore) ExceptionScope(org.jbpm.process.core.context.exception.ExceptionScope) SignalProcessInstanceAction(org.jbpm.process.instance.impl.actions.SignalProcessInstanceAction) RuleFlowProcess(org.jbpm.ruleflow.core.RuleFlowProcess) StateBasedNode(org.jbpm.workflow.core.node.StateBasedNode) CompensationScope(org.jbpm.process.core.context.exception.CompensationScope) Escalation(org.jbpm.bpmn2.core.Escalation) Split(org.jbpm.workflow.core.node.Split) HashMap(java.util.HashMap) EventSubProcessNode(org.jbpm.workflow.core.node.EventSubProcessNode) ArrayList(java.util.ArrayList) Lane(org.jbpm.bpmn2.core.Lane) Timer(org.jbpm.process.core.timer.Timer) HashSet(java.util.HashSet) Expression(org.jbpm.bpmn2.core.Expression) Swimlane(org.jbpm.process.core.context.swimlane.Swimlane) Attributes(org.xml.sax.Attributes) BaseAbstractHandler(org.drools.core.xml.BaseAbstractHandler) ConnectionImpl(org.jbpm.workflow.core.impl.ConnectionImpl) FaultNode(org.jbpm.workflow.core.node.FaultNode) DroolsAction(org.jbpm.workflow.core.DroolsAction) LinkedHashSet(java.util.LinkedHashSet) CorrelationSubscription(org.jbpm.bpmn2.core.CorrelationSubscription) WorkItemNode(org.jbpm.workflow.core.node.WorkItemNode) Interface(org.jbpm.bpmn2.core.Interface) ConnectionRef(org.jbpm.workflow.core.impl.ConnectionRef) ActionNode(org.jbpm.workflow.core.node.ActionNode) EndNode(org.jbpm.workflow.core.node.EndNode) Logger(org.slf4j.Logger) Metadata(org.jbpm.ruleflow.core.Metadata) EventNode(org.jbpm.workflow.core.node.EventNode) ConstraintImpl(org.jbpm.workflow.core.impl.ConstraintImpl) Handler(org.drools.core.xml.Handler) MVELMessageExpressionEvaluator(org.jbpm.process.core.event.MVELMessageExpressionEvaluator) Node(org.kie.api.definition.process.Node) CompensationHandler(org.jbpm.process.core.context.exception.CompensationHandler) Definitions(org.jbpm.bpmn2.core.Definitions) Action(org.jbpm.process.instance.impl.Action) KogitoWorkflowProcess(org.kie.kogito.internal.process.runtime.KogitoWorkflowProcess) ExtendedNodeImpl(org.jbpm.workflow.core.impl.ExtendedNodeImpl) MVELMessageExpressionEvaluator(org.jbpm.process.core.event.MVELMessageExpressionEvaluator) Message(org.jbpm.bpmn2.core.Message) CorrelationSubscription(org.jbpm.bpmn2.core.CorrelationSubscription) CorrelationManager(org.jbpm.process.core.correlation.CorrelationManager) CorrelationKey(org.jbpm.bpmn2.core.CorrelationKey) Expression(org.jbpm.bpmn2.core.Expression) Collaboration(org.jbpm.bpmn2.core.Collaboration) CorrelationProperty(org.jbpm.bpmn2.core.CorrelationProperty) Map(java.util.Map) HashMap(java.util.HashMap)

Aggregations

Element (org.w3c.dom.Element)10 HashMap (java.util.HashMap)8 Expression (org.jbpm.bpmn2.core.Expression)8 SequenceFlow (org.jbpm.bpmn2.core.SequenceFlow)7 Node (org.w3c.dom.Node)6 List (java.util.List)5 Map (java.util.Map)4 ItemDefinition (org.jbpm.bpmn2.core.ItemDefinition)4 ProcessBuildData (org.jbpm.compiler.xml.ProcessBuildData)4 ArrayList (java.util.ArrayList)3 Collection (java.util.Collection)3 HashSet (java.util.HashSet)3 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)3 BaseAbstractHandler (org.drools.core.xml.BaseAbstractHandler)3 ExtensibleXmlParser (org.drools.core.xml.ExtensibleXmlParser)3 Handler (org.drools.core.xml.Handler)3 Association (org.jbpm.bpmn2.core.Association)3 Definitions (org.jbpm.bpmn2.core.Definitions)3 Error (org.jbpm.bpmn2.core.Error)3 Lane (org.jbpm.bpmn2.core.Lane)3