Search in sources :

Example 36 with Node

use of org.kie.api.definition.process.Node in project jbpm by kiegroup.

the class JoinInstance method existsActiveDirectFlow.

private boolean existsActiveDirectFlow(NodeInstanceContainer nodeInstanceContainer, final Node lookFor) {
    Collection<NodeInstance> activeNodeInstancesOrig = nodeInstanceContainer.getNodeInstances();
    List<NodeInstance> activeNodeInstances = new ArrayList<NodeInstance>(activeNodeInstancesOrig);
    // sort active instances in the way that lookFor nodeInstance will be last to not finish too early
    Collections.sort(activeNodeInstances, new Comparator<NodeInstance>() {

        @Override
        public int compare(NodeInstance o1, NodeInstance o2) {
            if (o1.getNodeId() == lookFor.getId()) {
                return 1;
            } else if (o2.getNodeId() == lookFor.getId()) {
                return -1;
            }
            return 0;
        }
    });
    for (NodeInstance nodeInstance : activeNodeInstances) {
        // do not consider NodeInstanceContainers to be checked, enough to treat is as black box
        if (((org.jbpm.workflow.instance.NodeInstance) nodeInstance).getLevel() != getLevel()) {
            continue;
        }
        Node node = nodeInstance.getNode();
        Set<Long> vistedNodes = new HashSet<Long>();
        checkNodes(vistedNodes, node, node, lookFor);
        if (vistedNodes.contains(lookFor.getId()) && !vistedNodes.contains(node.getId())) {
            return true;
        }
    }
    return false;
}
Also used : Node(org.kie.api.definition.process.Node) ArrayList(java.util.ArrayList) NodeInstance(org.kie.api.runtime.process.NodeInstance) HashSet(java.util.HashSet)

Example 37 with Node

use of org.kie.api.definition.process.Node in project jbpm by kiegroup.

the class CompositeNodeInstance method signalEvent.

@Override
public void signalEvent(String type, Object event) {
    List<NodeInstance> currentView = new ArrayList<NodeInstance>(this.nodeInstances);
    super.signalEvent(type, event);
    for (Node node : getCompositeNode().internalGetNodes()) {
        if (node instanceof EventNodeInterface) {
            if (((EventNodeInterface) node).acceptsEvent(type, event)) {
                if (node instanceof EventNode && ((EventNode) node).getFrom() == null) {
                    EventNodeInstanceInterface eventNodeInstance = (EventNodeInstanceInterface) getNodeInstance(node);
                    eventNodeInstance.signalEvent(type, event);
                } else if (node instanceof EventSubProcessNode) {
                    EventNodeInstanceInterface eventNodeInstance = (EventNodeInstanceInterface) getNodeInstance(node);
                    eventNodeInstance.signalEvent(type, event);
                } else {
                    List<NodeInstance> nodeInstances = getNodeInstances(node.getId(), currentView);
                    if (nodeInstances != null && !nodeInstances.isEmpty()) {
                        for (NodeInstance nodeInstance : nodeInstances) {
                            ((EventNodeInstanceInterface) nodeInstance).signalEvent(type, event);
                        }
                    }
                }
            }
        }
    }
}
Also used : AsyncEventNode(org.jbpm.workflow.core.node.AsyncEventNode) EventNode(org.jbpm.workflow.core.node.EventNode) EventNodeInterface(org.jbpm.workflow.core.node.EventNodeInterface) EventSubProcessNode(org.jbpm.workflow.core.node.EventSubProcessNode) StateBasedNode(org.jbpm.workflow.core.node.StateBasedNode) StartNode(org.jbpm.workflow.core.node.StartNode) CompositeNode(org.jbpm.workflow.core.node.CompositeNode) EventSubProcessNode(org.jbpm.workflow.core.node.EventSubProcessNode) AsyncEventNode(org.jbpm.workflow.core.node.AsyncEventNode) 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) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) NodeInstance(org.jbpm.workflow.instance.NodeInstance)

Example 38 with Node

use of org.kie.api.definition.process.Node in project jbpm by kiegroup.

the class CompositeNodeInstance method nodeInstanceCompleted.

public void nodeInstanceCompleted(NodeInstance nodeInstance, String outType) {
    Node nodeInstanceNode = nodeInstance.getNode();
    if (nodeInstanceNode != null) {
        Object compensationBoolObj = nodeInstanceNode.getMetaData().get("isForCompensation");
        boolean isForCompensation = compensationBoolObj == null ? false : ((Boolean) compensationBoolObj);
        if (isForCompensation) {
            return;
        }
    }
    if (nodeInstance instanceof EndNodeInstance || nodeInstance instanceof EventSubProcessNodeInstance) {
        if (getCompositeNode().isAutoComplete()) {
            if (nodeInstances.isEmpty()) {
                triggerCompleted(org.jbpm.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
            }
        }
    } else {
        throw new IllegalArgumentException("Completing a node instance that has no outgoing connection not supported.");
    }
}
Also used : StateBasedNode(org.jbpm.workflow.core.node.StateBasedNode) StartNode(org.jbpm.workflow.core.node.StartNode) CompositeNode(org.jbpm.workflow.core.node.CompositeNode) EventSubProcessNode(org.jbpm.workflow.core.node.EventSubProcessNode) AsyncEventNode(org.jbpm.workflow.core.node.AsyncEventNode) 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)

Example 39 with Node

use of org.kie.api.definition.process.Node in project jbpm by kiegroup.

the class CompositeNodeInstance method getNodeInstance.

public NodeInstance getNodeInstance(final Node node) {
    // TODO do this cleaner for start / end of composite?
    if (node instanceof CompositeNode.CompositeNodeStart) {
        CompositeNodeStartInstance nodeInstance = new CompositeNodeStartInstance();
        nodeInstance.setNodeId(node.getId());
        nodeInstance.setNodeInstanceContainer(this);
        nodeInstance.setProcessInstance(getProcessInstance());
        return nodeInstance;
    } else if (node instanceof CompositeNode.CompositeNodeEnd) {
        CompositeNodeEndInstance nodeInstance = new CompositeNodeEndInstance();
        nodeInstance.setNodeId(node.getId());
        nodeInstance.setNodeInstanceContainer(this);
        nodeInstance.setProcessInstance(getProcessInstance());
        return nodeInstance;
    }
    Node actualNode = node;
    // async continuation handling
    if (node instanceof AsyncEventNode) {
        actualNode = ((AsyncEventNode) node).getActualNode();
    } else if (useAsync(node)) {
        actualNode = new AsyncEventNode(node);
    }
    NodeInstanceFactory conf = NodeInstanceFactoryRegistry.getInstance(getProcessInstance().getKnowledgeRuntime().getEnvironment()).getProcessNodeInstanceFactory(actualNode);
    if (conf == null) {
        throw new IllegalArgumentException("Illegal node type: " + node.getClass());
    }
    NodeInstanceImpl nodeInstance = (NodeInstanceImpl) conf.getNodeInstance(actualNode, getProcessInstance(), this);
    if (nodeInstance == null) {
        throw new IllegalArgumentException("Illegal node type: " + node.getClass());
    }
    return nodeInstance;
}
Also used : NodeInstanceImpl(org.jbpm.workflow.instance.impl.NodeInstanceImpl) NodeInstanceFactory(org.jbpm.workflow.instance.impl.NodeInstanceFactory) CompositeNode(org.jbpm.workflow.core.node.CompositeNode) StateBasedNode(org.jbpm.workflow.core.node.StateBasedNode) StartNode(org.jbpm.workflow.core.node.StartNode) CompositeNode(org.jbpm.workflow.core.node.CompositeNode) EventSubProcessNode(org.jbpm.workflow.core.node.EventSubProcessNode) AsyncEventNode(org.jbpm.workflow.core.node.AsyncEventNode) 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) AsyncEventNode(org.jbpm.workflow.core.node.AsyncEventNode)

Example 40 with Node

use of org.kie.api.definition.process.Node in project jbpm by kiegroup.

the class DynamicNodeInstance method nodeInstanceCompleted.

public void nodeInstanceCompleted(org.jbpm.workflow.instance.NodeInstance nodeInstance, String outType) {
    Node nodeInstanceNode = nodeInstance.getNode();
    if (nodeInstanceNode != null) {
        Object compensationBoolObj = nodeInstanceNode.getMetaData().get("isForCompensation");
        boolean isForCompensation = compensationBoolObj == null ? false : ((Boolean) compensationBoolObj);
        if (isForCompensation) {
            return;
        }
    }
    String completionCondition = getDynamicNode().getCompletionExpression();
    // TODO are we sure there will always be node instances left if we are not done yet?
    if (isTerminated(nodeInstance)) {
        triggerCompleted(NodeImpl.CONNECTION_DEFAULT_TYPE);
    } else if (getDynamicNode().isAutoComplete() && getNodeInstances(false).isEmpty()) {
        triggerCompleted(NodeImpl.CONNECTION_DEFAULT_TYPE);
    } else if (completionCondition != null && "mvel".equals(getDynamicNode().getLanguage())) {
        Object value = MVELSafeHelper.getEvaluator().eval(completionCondition, new NodeInstanceResolverFactory(this));
        if (!(value instanceof Boolean)) {
            throw new RuntimeException("Completion condition expression must return boolean values: " + value + " for expression " + completionCondition);
        }
        if (((Boolean) value).booleanValue()) {
            triggerCompleted(NodeImpl.CONNECTION_DEFAULT_TYPE);
        }
    }
}
Also used : DynamicNode(org.jbpm.workflow.core.node.DynamicNode) Node(org.kie.api.definition.process.Node) NodeInstanceResolverFactory(org.jbpm.workflow.instance.impl.NodeInstanceResolverFactory)

Aggregations

Node (org.kie.api.definition.process.Node)70 StartNode (org.jbpm.workflow.core.node.StartNode)27 EventNode (org.jbpm.workflow.core.node.EventNode)26 ActionNode (org.jbpm.workflow.core.node.ActionNode)25 EndNode (org.jbpm.workflow.core.node.EndNode)25 CompositeNode (org.jbpm.workflow.core.node.CompositeNode)22 ArrayList (java.util.ArrayList)20 EventSubProcessNode (org.jbpm.workflow.core.node.EventSubProcessNode)20 WorkItemNode (org.jbpm.workflow.core.node.WorkItemNode)19 FaultNode (org.jbpm.workflow.core.node.FaultNode)17 HumanTaskNode (org.jbpm.workflow.core.node.HumanTaskNode)17 StateBasedNode (org.jbpm.workflow.core.node.StateBasedNode)15 BoundaryEventNode (org.jbpm.workflow.core.node.BoundaryEventNode)13 NodeContainer (org.kie.api.definition.process.NodeContainer)13 DynamicNode (org.jbpm.workflow.core.node.DynamicNode)11 ForEachNode (org.jbpm.workflow.core.node.ForEachNode)11 StateNode (org.jbpm.workflow.core.node.StateNode)11 RuleSetNode (org.jbpm.workflow.core.node.RuleSetNode)10 SubProcessNode (org.jbpm.workflow.core.node.SubProcessNode)10 WorkflowProcessInstanceImpl (org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl)10