Search in sources :

Example 11 with DynamicNode

use of org.jbpm.workflow.core.node.DynamicNode in project jbpm by kiegroup.

the class ProcessBuilderImpl method generateRules.

private void generateRules(Node[] nodes, Process process, StringBuffer builder) {
    for (int i = 0; i < nodes.length; i++) {
        if (nodes[i] instanceof Split) {
            Split split = (Split) nodes[i];
            if (split.getType() == Split.TYPE_XOR || split.getType() == Split.TYPE_OR) {
                for (Connection connection : split.getDefaultOutgoingConnections()) {
                    Constraint constraint = split.getConstraint(connection);
                    if (constraint != null && "rule".equals(constraint.getType())) {
                        builder.append(createSplitRule(process, connection, split.getConstraint(connection).getConstraint()));
                    }
                }
            }
        } else if (nodes[i] instanceof MilestoneNode) {
            MilestoneNode milestone = (MilestoneNode) nodes[i];
            builder.append(createMilestoneRule(process, milestone));
        } else if (nodes[i] instanceof StateNode) {
            StateNode state = (StateNode) nodes[i];
            builder.append(createStateRules(process, state));
        } else if (nodes[i] instanceof StartNode) {
            StartNode startNode = (StartNode) nodes[i];
            List<Trigger> triggers = startNode.getTriggers();
            if (triggers != null) {
                for (Trigger trigger : triggers) {
                    if (trigger instanceof ConstraintTrigger) {
                        builder.append(createStartConstraintRule(process, startNode.getNodeContainer(), (ConstraintTrigger) trigger));
                    }
                }
            }
        } else if (nodes[i] instanceof NodeContainer) {
            generateRules(((NodeContainer) nodes[i]).getNodes(), process, builder);
            if (nodes[i] instanceof DynamicNode && "rule".equals(((DynamicNode) nodes[i]).getLanguage())) {
                DynamicNode dynamicNode = (DynamicNode) nodes[i];
                if (dynamicNode.getCompletionExpression() != null) {
                    builder.append(createAdHocCompletionRule(process, dynamicNode));
                }
                if (dynamicNode.getActivationExpression() != null && !dynamicNode.getActivationExpression().isEmpty()) {
                    builder.append(createAdHocActivationRule(process, dynamicNode));
                }
            }
        } else if (nodes[i] instanceof EventNode) {
            EventNode state = (EventNode) nodes[i];
            builder.append(createEventStateRule(process, state));
        }
    }
}
Also used : ConstraintTrigger(org.jbpm.workflow.core.node.ConstraintTrigger) StartNode(org.jbpm.workflow.core.node.StartNode) Constraint(org.jbpm.workflow.core.Constraint) Connection(org.kie.api.definition.process.Connection) StateNode(org.jbpm.workflow.core.node.StateNode) NodeContainer(org.kie.api.definition.process.NodeContainer) MilestoneNode(org.jbpm.workflow.core.node.MilestoneNode) Constraint(org.jbpm.workflow.core.Constraint) EventNode(org.jbpm.workflow.core.node.EventNode) ConstraintTrigger(org.jbpm.workflow.core.node.ConstraintTrigger) Trigger(org.jbpm.workflow.core.node.Trigger) List(java.util.List) ArrayList(java.util.ArrayList) DynamicNode(org.jbpm.workflow.core.node.DynamicNode) Split(org.jbpm.workflow.core.node.Split)

Example 12 with DynamicNode

use of org.jbpm.workflow.core.node.DynamicNode in project jbpm by kiegroup.

the class RuleFlowProcessValidator method checkAllNodesConnectedToStart.

private void checkAllNodesConnectedToStart(final NodeContainer container, boolean isDynamic, final List<ProcessValidationError> errors, RuleFlowProcess process) {
    final Map<Node, Boolean> processNodes = new HashMap<Node, Boolean>();
    final Node[] nodes;
    if (container instanceof CompositeNode) {
        nodes = ((CompositeNode) container).internalGetNodes();
    } else {
        nodes = container.getNodes();
    }
    List<Node> eventNodes = new ArrayList<Node>();
    List<CompositeNode> compositeNodes = new ArrayList<CompositeNode>();
    for (int i = 0; i < nodes.length; i++) {
        final Node node = nodes[i];
        processNodes.put(node, Boolean.FALSE);
        if (node instanceof EventNode) {
            eventNodes.add(node);
        }
        if (node instanceof CompositeNode) {
            compositeNodes.add((CompositeNode) node);
        }
    }
    if (isDynamic) {
        for (Node node : nodes) {
            if (node.getIncomingConnections(NodeImpl.CONNECTION_DEFAULT_TYPE).isEmpty()) {
                processNode(node, processNodes);
            }
        }
    } else {
        final List<Node> start = RuleFlowProcess.getStartNodes(nodes);
        if (start != null) {
            for (Node s : start) {
                processNode(s, processNodes);
            }
        }
        if (container instanceof CompositeNode) {
            for (CompositeNode.NodeAndType nodeAndTypes : ((CompositeNode) container).getLinkedIncomingNodes().values()) {
                processNode(nodeAndTypes.getNode(), processNodes);
            }
        }
    }
    for (Node eventNode : eventNodes) {
        processNode(eventNode, processNodes);
    }
    for (CompositeNode compositeNode : compositeNodes) {
        checkAllNodesConnectedToStart(compositeNode, compositeNode instanceof DynamicNode, errors, process);
    }
    for (final Iterator<Node> it = processNodes.keySet().iterator(); it.hasNext(); ) {
        final Node node = it.next();
        if (Boolean.FALSE.equals(processNodes.get(node)) && !(node instanceof StartNode) && !(node instanceof EventSubProcessNode)) {
            addErrorMessage(process, node, errors, "Has no connection to the start node.");
        }
    }
}
Also used : StartNode(org.jbpm.workflow.core.node.StartNode) HashMap(java.util.HashMap) EventSubProcessNode(org.jbpm.workflow.core.node.EventSubProcessNode) ForEachNode(org.jbpm.workflow.core.node.ForEachNode) BoundaryEventNode(org.jbpm.workflow.core.node.BoundaryEventNode) DynamicNode(org.jbpm.workflow.core.node.DynamicNode) StartNode(org.jbpm.workflow.core.node.StartNode) CompositeNode(org.jbpm.workflow.core.node.CompositeNode) StateNode(org.jbpm.workflow.core.node.StateNode) RuleSetNode(org.jbpm.workflow.core.node.RuleSetNode) SubProcessNode(org.jbpm.workflow.core.node.SubProcessNode) CatchLinkNode(org.jbpm.workflow.core.node.CatchLinkNode) ForEachJoinNode(org.jbpm.workflow.core.node.ForEachNode.ForEachJoinNode) MilestoneNode(org.jbpm.workflow.core.node.MilestoneNode) ThrowLinkNode(org.jbpm.workflow.core.node.ThrowLinkNode) EventSubProcessNode(org.jbpm.workflow.core.node.EventSubProcessNode) TimerNode(org.jbpm.workflow.core.node.TimerNode) FaultNode(org.jbpm.workflow.core.node.FaultNode) WorkItemNode(org.jbpm.workflow.core.node.WorkItemNode) ActionNode(org.jbpm.workflow.core.node.ActionNode) EndNode(org.jbpm.workflow.core.node.EndNode) EventNode(org.jbpm.workflow.core.node.EventNode) Node(org.kie.api.definition.process.Node) ForEachSplitNode(org.jbpm.workflow.core.node.ForEachNode.ForEachSplitNode) ArrayList(java.util.ArrayList) CompositeNode(org.jbpm.workflow.core.node.CompositeNode) BoundaryEventNode(org.jbpm.workflow.core.node.BoundaryEventNode) EventNode(org.jbpm.workflow.core.node.EventNode) NodeAndType(org.jbpm.workflow.core.node.CompositeNode.NodeAndType) DynamicNode(org.jbpm.workflow.core.node.DynamicNode)

Aggregations

DynamicNode (org.jbpm.workflow.core.node.DynamicNode)12 ArrayList (java.util.ArrayList)6 MilestoneNode (org.jbpm.workflow.core.node.MilestoneNode)6 StartNode (org.jbpm.workflow.core.node.StartNode)6 EventNode (org.jbpm.workflow.core.node.EventNode)5 Node (org.kie.api.definition.process.Node)5 HashMap (java.util.HashMap)4 List (java.util.List)4 ActionNode (org.jbpm.workflow.core.node.ActionNode)4 BoundaryEventNode (org.jbpm.workflow.core.node.BoundaryEventNode)4 EndNode (org.jbpm.workflow.core.node.EndNode)4 StateNode (org.jbpm.workflow.core.node.StateNode)4 Map (java.util.Map)3 RuleFlowProcess (org.jbpm.ruleflow.core.RuleFlowProcess)3 FaultNode (org.jbpm.workflow.core.node.FaultNode)3 ForEachNode (org.jbpm.workflow.core.node.ForEachNode)3 RuleSetNode (org.jbpm.workflow.core.node.RuleSetNode)3 Split (org.jbpm.workflow.core.node.Split)3 SubProcessNode (org.jbpm.workflow.core.node.SubProcessNode)3 TimerNode (org.jbpm.workflow.core.node.TimerNode)3