Search in sources :

Example 26 with DataAssociation

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

the class TaskHandler method readDataInputAssociation.

protected void readDataInputAssociation(org.w3c.dom.Node xmlNode, WorkItemNode workItemNode, Map<String, String> dataInputs) {
    // sourceRef
    org.w3c.dom.Node subNode = xmlNode.getFirstChild();
    if ("sourceRef".equals(subNode.getNodeName())) {
        List<String> sources = new ArrayList<>();
        sources.add(subNode.getTextContent());
        subNode = subNode.getNextSibling();
        while ("sourceRef".equals(subNode.getNodeName())) {
            sources.add(subNode.getTextContent());
            subNode = subNode.getNextSibling();
        }
        // targetRef
        String target = subNode.getTextContent();
        // transformation
        Transformation transformation = null;
        subNode = subNode.getNextSibling();
        if (subNode != null && "transformation".equals(subNode.getNodeName())) {
            String lang = subNode.getAttributes().getNamedItem("language").getNodeValue();
            String expression = subNode.getTextContent();
            DataTransformer transformer = transformerRegistry.find(lang);
            if (transformer == null) {
                throw new IllegalArgumentException("No transformer registered for language " + lang);
            }
            transformation = new Transformation(lang, expression);
            // transformation.setCompiledExpression(transformer.compile(expression));
            subNode = subNode.getNextSibling();
        }
        // assignments
        List<Assignment> assignments = new LinkedList<Assignment>();
        while (subNode != null) {
            String expressionLang = ((Element) subNode).getAttribute("expressionLanguage");
            if (expressionLang == null || expressionLang.trim().isEmpty()) {
                expressionLang = "XPath";
            }
            org.w3c.dom.Node ssubNode = subNode.getFirstChild();
            String from = ssubNode.getTextContent();
            String to = ssubNode.getNextSibling().getTextContent();
            assignments.add(new Assignment(expressionLang, from, to));
            subNode = subNode.getNextSibling();
        }
        workItemNode.addInAssociation(new DataAssociation(sources, dataInputs.get(target), assignments, transformation));
    } else {
        // targetRef
        String to = subNode.getTextContent();
        // assignment
        subNode = subNode.getNextSibling();
        if (subNode != null) {
            org.w3c.dom.Node subSubNode = subNode.getFirstChild();
            NodeList nl = subSubNode.getChildNodes();
            if (nl.getLength() > 1) {
                // not supported ?
                workItemNode.getWork().setParameter(dataInputs.get(to), subSubNode.getTextContent());
                return;
            } else if (nl.getLength() == 0) {
                return;
            }
            Object result = null;
            Object from = nl.item(0);
            if (from instanceof Text) {
                String text = ((Text) from).getTextContent();
                if (text.startsWith("\"") && text.endsWith("\"")) {
                    result = text.substring(1, text.length() - 1);
                } else {
                    result = text;
                }
            } else {
                result = nl.item(0);
            }
            workItemNode.getWork().setParameter(dataInputs.get(to), result);
        }
    }
}
Also used : Transformation(io.automatiko.engine.workflow.process.core.node.Transformation) DataAssociation(io.automatiko.engine.workflow.process.core.node.DataAssociation) Element(org.w3c.dom.Element) NodeList(org.w3c.dom.NodeList) ArrayList(java.util.ArrayList) Text(org.w3c.dom.Text) LinkedList(java.util.LinkedList) Assignment(io.automatiko.engine.workflow.process.core.node.Assignment) DataTransformer(io.automatiko.engine.api.runtime.process.DataTransformer)

Example 27 with DataAssociation

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

the class TaskHandler method readDataOutputAssociation.

protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, WorkItemNode workItemNode, Map<String, String> dataOutputs) {
    // sourceRef
    org.w3c.dom.Node subNode = xmlNode.getFirstChild();
    List<String> sources = new ArrayList<>();
    sources.add(subNode.getTextContent());
    subNode = subNode.getNextSibling();
    while ("sourceRef".equals(subNode.getNodeName())) {
        sources.add(subNode.getTextContent());
        subNode = subNode.getNextSibling();
    }
    // targetRef
    String target = subNode.getTextContent();
    // transformation
    Transformation transformation = null;
    subNode = subNode.getNextSibling();
    if (subNode != null && "transformation".equals(subNode.getNodeName())) {
        String lang = subNode.getAttributes().getNamedItem("language").getNodeValue();
        String expression = subNode.getTextContent();
        DataTransformer transformer = transformerRegistry.find(lang);
        if (transformer == null) {
            throw new IllegalArgumentException("No transformer registered for language " + lang);
        }
        transformation = new Transformation(lang, expression);
        // transformation.setCompiledExpression(transformer.compile(expression));
        subNode = subNode.getNextSibling();
    }
    // assignments
    List<Assignment> assignments = new LinkedList<Assignment>();
    while (subNode != null) {
        String expressionLang = ((Element) subNode).getAttribute("expressionLanguage");
        if (expressionLang == null || expressionLang.trim().isEmpty()) {
            expressionLang = "XPath";
        }
        org.w3c.dom.Node ssubNode = subNode.getFirstChild();
        String from = ssubNode.getTextContent();
        String to = ssubNode.getNextSibling().getTextContent();
        assignments.add(new Assignment(expressionLang, from, to));
        subNode = subNode.getNextSibling();
    }
    workItemNode.addOutAssociation(new DataAssociation(sources.stream().map(source -> dataOutputs.get(source)).collect(Collectors.toList()), target, assignments, transformation));
}
Also used : Text(org.w3c.dom.Text) Assignment(io.automatiko.engine.workflow.process.core.node.Assignment) ItemDefinition(io.automatiko.engine.workflow.bpmn2.core.ItemDefinition) NodeContainer(io.automatiko.engine.workflow.process.core.NodeContainer) ObjectDataType(io.automatiko.engine.workflow.base.core.datatype.impl.type.ObjectDataType) ProcessBuildData(io.automatiko.engine.workflow.compiler.xml.ProcessBuildData) ArrayList(java.util.ArrayList) DataTransformer(io.automatiko.engine.api.runtime.process.DataTransformer) LinkedHashMap(java.util.LinkedHashMap) NodeImpl(io.automatiko.engine.workflow.process.core.impl.NodeImpl) DataAssociation(io.automatiko.engine.workflow.process.core.node.DataAssociation) Map(java.util.Map) Attributes(org.xml.sax.Attributes) LinkedList(java.util.LinkedList) Node(io.automatiko.engine.workflow.process.core.Node) ParameterDefinition(io.automatiko.engine.workflow.base.core.ParameterDefinition) ForEachNode(io.automatiko.engine.workflow.process.core.node.ForEachNode) NodeList(org.w3c.dom.NodeList) MilestoneNode(io.automatiko.engine.workflow.process.core.node.MilestoneNode) Collectors(java.util.stream.Collectors) ClassUtils.constructClass(io.automatiko.engine.workflow.compiler.util.ClassUtils.constructClass) Transformation(io.automatiko.engine.workflow.process.core.node.Transformation) DataTransformerRegistry(io.automatiko.engine.workflow.base.core.impl.DataTransformerRegistry) List(java.util.List) Element(org.w3c.dom.Element) ExtensibleXmlParser(io.automatiko.engine.workflow.compiler.xml.ExtensibleXmlParser) SAXException(org.xml.sax.SAXException) WorkItemNode(io.automatiko.engine.workflow.process.core.node.WorkItemNode) Entry(java.util.Map.Entry) CONDITION(io.automatiko.engine.workflow.process.executable.core.Metadata.CONDITION) ParameterDefinitionImpl(io.automatiko.engine.workflow.base.core.impl.ParameterDefinitionImpl) WorkImpl(io.automatiko.engine.workflow.base.core.impl.WorkImpl) Work(io.automatiko.engine.workflow.base.core.Work) Transformation(io.automatiko.engine.workflow.process.core.node.Transformation) DataAssociation(io.automatiko.engine.workflow.process.core.node.DataAssociation) Element(org.w3c.dom.Element) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) Assignment(io.automatiko.engine.workflow.process.core.node.Assignment) DataTransformer(io.automatiko.engine.api.runtime.process.DataTransformer)

Example 28 with DataAssociation

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

the class AbstractNodeVisitor method addNodeMappings.

protected void addNodeMappings(WorkflowProcess process, Mappable node, BlockStmt body, String variableName) {
    boolean serverless = ProcessToExecModelGenerator.isServerlessWorkflow(process);
    if (serverless) {
        for (DataAssociation association : node.getInAssociations()) {
            if (association.getAssignments() != null && !association.getAssignments().isEmpty()) {
                TaskInputJqAssignmentAction action = (TaskInputJqAssignmentAction) association.getAssignments().get(0).getMetaData("Action");
                String inputFilter = action.getInputFilterExpression();
                Set<String> params = action.getParamNames();
                List<Expression> expressions = new ArrayList<>();
                expressions.add(inputFilter != null ? new StringLiteralExpr().setString(inputFilter) : new NullLiteralExpr());
                for (String param : params) {
                    expressions.add(param != null ? new StringLiteralExpr().setString(param) : new NullLiteralExpr());
                }
                body.addStatement(getFactoryMethod(variableName, METHOD_IN_JQ_MAPPING, expressions.toArray(Expression[]::new)));
            }
        }
        for (DataAssociation association : node.getOutAssociations()) {
            if (association.getAssignments() != null && !association.getAssignments().isEmpty()) {
                TaskOutputJqAssignmentAction action = (TaskOutputJqAssignmentAction) association.getAssignments().get(0).getMetaData("Action");
                String outputFilter = action.getOutputFilterExpression();
                String scopeFilter = action.getScopeFilter();
                body.addStatement(getFactoryMethod(variableName, METHOD_OUT_JQ_MAPPING, (outputFilter != null ? new StringLiteralExpr().setString(outputFilter) : new NullLiteralExpr()), (scopeFilter != null ? new StringLiteralExpr().setString(scopeFilter) : new NullLiteralExpr()), new BooleanLiteralExpr(action.isIgnoreScopeFilter())));
            }
        }
    } else {
        for (Entry<String, String> entry : node.getInMappings().entrySet()) {
            body.addStatement(getFactoryMethod(variableName, METHOD_IN_MAPPING, new StringLiteralExpr(entry.getKey()), new StringLiteralExpr(entry.getValue())));
        }
        for (Entry<String, String> entry : node.getOutMappings().entrySet()) {
            body.addStatement(getFactoryMethod(variableName, METHOD_OUT_MAPPING, new StringLiteralExpr(entry.getKey()), new StringLiteralExpr(entry.getValue())));
        }
    }
}
Also used : DataAssociation(io.automatiko.engine.workflow.process.core.node.DataAssociation) TaskInputJqAssignmentAction(io.automatiko.engine.workflow.base.instance.impl.jq.TaskInputJqAssignmentAction) ArrayList(java.util.ArrayList) StringLiteralExpr(com.github.javaparser.ast.expr.StringLiteralExpr) TaskOutputJqAssignmentAction(io.automatiko.engine.workflow.base.instance.impl.jq.TaskOutputJqAssignmentAction) NullLiteralExpr(com.github.javaparser.ast.expr.NullLiteralExpr) Expression(com.github.javaparser.ast.expr.Expression) BooleanLiteralExpr(com.github.javaparser.ast.expr.BooleanLiteralExpr)

Example 29 with DataAssociation

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

the class CompositeContextNodeVisitor method visitDataMapping.

protected void visitDataMapping(WorkflowProcess process, String contextNode, T node, BlockStmt body) {
    boolean serverless = ProcessToExecModelGenerator.isServerlessWorkflow(process);
    if (serverless) {
        for (DataAssociation association : node.getInAssociations()) {
            if (association.getAssignments() != null && !association.getAssignments().isEmpty()) {
                InputJqAssignmentAction action = (InputJqAssignmentAction) association.getAssignments().get(0).getMetaData("Action");
                String inputFilter = action.getInputFilterExpression();
                body.addStatement(getFactoryMethod(contextNode, METHOD_JQ_IN_MAPPING, (inputFilter != null ? new StringLiteralExpr().setString(inputFilter) : new NullLiteralExpr())));
            }
        }
        for (DataAssociation association : node.getOutAssociations()) {
            if (association.getAssignments() != null && !association.getAssignments().isEmpty()) {
                OutputJqAssignmentAction action = (OutputJqAssignmentAction) association.getAssignments().get(0).getMetaData("Action");
                String outputFilter = action.getOutputFilterExpression();
                body.addStatement(getFactoryMethod(contextNode, METHOD_JQ_OUT_MAPPING, (outputFilter != null ? new StringLiteralExpr().setString(outputFilter) : new NullLiteralExpr())));
            }
        }
    }
}
Also used : NullLiteralExpr(com.github.javaparser.ast.expr.NullLiteralExpr) DataAssociation(io.automatiko.engine.workflow.process.core.node.DataAssociation) StringLiteralExpr(com.github.javaparser.ast.expr.StringLiteralExpr) InputJqAssignmentAction(io.automatiko.engine.workflow.base.instance.impl.jq.InputJqAssignmentAction) OutputJqAssignmentAction(io.automatiko.engine.workflow.base.instance.impl.jq.OutputJqAssignmentAction)

Example 30 with DataAssociation

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

the class CompositeContextNodeFactory method outMappingWithJqAssignment.

public CompositeContextNodeFactory outMappingWithJqAssignment(String stateDataFilter) {
    Assignment outputAssignment = new Assignment("jq", "", "");
    outputAssignment.setMetaData("Action", new OutputJqAssignmentAction(stateDataFilter));
    getCompositeNode().addOutAssociation(new DataAssociation(Collections.emptyList(), "", Arrays.asList(outputAssignment), null));
    return this;
}
Also used : Assignment(io.automatiko.engine.workflow.process.core.node.Assignment) DataAssociation(io.automatiko.engine.workflow.process.core.node.DataAssociation) OutputJqAssignmentAction(io.automatiko.engine.workflow.base.instance.impl.jq.OutputJqAssignmentAction)

Aggregations

DataAssociation (io.automatiko.engine.workflow.process.core.node.DataAssociation)33 Assignment (io.automatiko.engine.workflow.process.core.node.Assignment)20 DataTransformer (io.automatiko.engine.api.runtime.process.DataTransformer)14 Transformation (io.automatiko.engine.workflow.process.core.node.Transformation)14 Map (java.util.Map)13 ArrayList (java.util.ArrayList)12 HashMap (java.util.HashMap)11 VariableScopeInstance (io.automatiko.engine.workflow.base.instance.context.variable.VariableScopeInstance)10 NodeInstanceResolverFactory (io.automatiko.engine.workflow.process.instance.impl.NodeInstanceResolverFactory)9 ExpressionEvaluator (io.automatiko.engine.api.expression.ExpressionEvaluator)7 Variable (io.automatiko.engine.workflow.base.core.context.variable.Variable)7 WorkflowProcess (io.automatiko.engine.workflow.process.core.WorkflowProcess)7 Matcher (java.util.regex.Matcher)7 LinkedList (java.util.LinkedList)6 List (java.util.List)6 Element (org.w3c.dom.Element)6 NullLiteralExpr (com.github.javaparser.ast.expr.NullLiteralExpr)4 StringLiteralExpr (com.github.javaparser.ast.expr.StringLiteralExpr)4 DataType (io.automatiko.engine.api.workflow.datatype.DataType)4 DataTransformerRegistry (io.automatiko.engine.workflow.base.core.impl.DataTransformerRegistry)4