EventSubProcessNode eventSubProcessNode = (EventSubProcessNode) node; Node[] nodes = eventSubProcessNode.getNodes(); for (Node subNode : nodes) { eventSubProcessNode.addEvent((EventTypeFilter) filter); final String signalType = type; ExceptionScope exceptionScope = (ExceptionScope) ((ContextContainer) eventSubProcessNode.getNodeContainer()).getDefaultContext(ExceptionScope.EXCEPTION_SCOPE); if (exceptionScope == null) { exceptionScope = new ExceptionScope(); ((ContextContainer) eventSubProcessNode.getNodeContainer()).addContext(exceptionScope); ((ContextContainer) eventSubProcessNode.getNodeContainer()).setDefaultContext(exceptionScope); NodeContainer subProcess = eventSubProcessNode.getNodeContainer(); Object isForCompensationObj = eventSubProcessNode.getMetaData("isForCompensation"); if( isForCompensationObj == null ) { eventSubProcessNode.setMetaData("isForCompensation", true ); logger.warn( "Overriding empty or false value of \"isForCompensation\" attribute on Event Sub-Process [" + eventSubProcessNode.getMetaData("UniqueId") + "] and setting it to true."); String type = "RuleFlowStateEventSubProcess-Event-" + processId + "-" + eventSubProcessNode.getUniqueId(); EventTypeFilter eventTypeFilter = new EventTypeFilter(); eventTypeFilter.setType(type); eventSubProcessNode.addEvent(eventTypeFilter);
if (nodeParent instanceof EventSubProcessNode) { boolean compensationEventSubProcess = false; List<Trigger> startTriggers = ((EventSubProcessNode) nodeParent).findStartNode().getTriggers(); CESP_CHECK: for (Trigger trigger : startTriggers) { if (trigger instanceof EventTrigger) {
protected Node createNode(Attributes attrs) { CompositeContextNode subProcessNode = new CompositeContextNode(); String eventSubprocessAttribute = attrs.getValue("triggeredByEvent"); if (eventSubprocessAttribute != null && Boolean.parseBoolean(eventSubprocessAttribute)) { subProcessNode = new EventSubProcessNode(); } VariableScope variableScope = new VariableScope(); subProcessNode.addContext(variableScope); subProcessNode.setDefaultContext(variableScope); String compensation = attrs.getValue("isForCompensation"); if( compensation != null ) { boolean isForCompensation = Boolean.parseBoolean(compensation); if( isForCompensation ) { subProcessNode.setMetaData("isForCompensation", isForCompensation ); } } subProcessNode.setAutoComplete(true); return subProcessNode; }
@Override public void signalEvent(String type, Object event) { if (getNodeInstanceContainer().getNodeInstances().contains(this) || type.startsWith("Error-") || type.equals("timerTriggered") ) { // start it only if it was not already started - meaning there are node instances if (this.getNodeInstances().isEmpty()) { StartNode startNode = getCompositeNode().findStartNode(); if (resolveVariables(((EventSubProcessNode) getEventBasedNode()).getEvents()).contains(type) || type.equals("timerTriggered")) { NodeInstance nodeInstance = getNodeInstance(startNode); ((StartNodeInstance) nodeInstance).signalEvent(type, event); } } } super.signalEvent(type, event); }
EventSubProcessNode eventSubProcessNode = (EventSubProcessNode) node; Node[] nodes = eventSubProcessNode.getNodes(); for (Node subNode : nodes) { eventSubProcessNode.addEvent((EventTypeFilter) filter); final String signalType = type; ExceptionScope exceptionScope = (ExceptionScope) ((ContextContainer) eventSubProcessNode.getNodeContainer()).getDefaultContext(ExceptionScope.EXCEPTION_SCOPE); if (exceptionScope == null) { exceptionScope = new ExceptionScope(); ((ContextContainer) eventSubProcessNode.getNodeContainer()).addContext(exceptionScope); ((ContextContainer) eventSubProcessNode.getNodeContainer()).setDefaultContext(exceptionScope); String type = "RuleFlowStateEventSubProcess-Event-" + processId + "-" + eventSubProcessNode.getUniqueId(); EventTypeFilter eventTypeFilter = new EventTypeFilter(); eventTypeFilter.setType(type); eventSubProcessNode.addEvent(eventTypeFilter);
@Override public void nodeInstanceCompleted(org.jbpm.workflow.instance.NodeInstance nodeInstance, String outType) { if (nodeInstance instanceof EndNodeInstance) { if (getCompositeNode().isKeepActive()) { StartNode startNode = getCompositeNode().findStartNode(); triggerCompleted(true); if (startNode.isInterrupting()) { String faultName = getProcessInstance().getOutcome()==null?"":getProcessInstance().getOutcome(); if (startNode.getMetaData("FaultCode") != null) { faultName = (String) startNode.getMetaData("FaultCode"); } if (getNodeInstanceContainer() instanceof ProcessInstance) { ((ProcessInstance) getProcessInstance()).setState(ProcessInstance.STATE_ABORTED, faultName); } else { ((NodeInstanceContainer) getNodeInstanceContainer()).setState( ProcessInstance.STATE_ABORTED); } } } } else { throw new IllegalArgumentException( "Completing a node instance that has no outgoing connection not supported."); } }
String EVENT_NAME = "subEvent"; eventFilter.setType(EVENT_NAME); espNode.addEvent(eventFilter);
@Override protected String getActivationType() { return "RuleFlowStateEventSubProcess-" + getProcessInstance().getProcessId() + "-" + getCompositeNode().getUniqueId(); }
public StartNode findStartNode() { for (Node node: getNodes()) { if (node instanceof StartNode) { StartNode startNode = (StartNode) node; return startNode; } } return null; }
private void registerExternalEventNodeListeners() { for (Node node: getCompositeNode().getNodes()) { if (node instanceof EventNode) { if ("external".equals(((EventNode) node).getScope())) { getProcessInstance().addEventListener( ((EventNode) node).getType(), EMPTY_EVENT_LISTENER, true); } } else if (node instanceof EventSubProcessNode) { List<String> events = ((EventSubProcessNode) node).getEvents(); for (String type : events) { getProcessInstance().addEventListener(type, EMPTY_EVENT_LISTENER, true); } } } }
@Override public boolean acceptsEvent(String type, Object event, Function<String, String> resolver) { if (resolver == null) { return acceptsEvent(type, event); } for( EventTypeFilter filter : this.eventTypeFilters ) { if( filter.acceptsEvent(type, event, resolver) ) { return true; } } return super.acceptsEvent(type, event); }
EventSubProcessNode eventSubProcessNode = (EventSubProcessNode) node; Node[] nodes = eventSubProcessNode.getNodes(); for (Node subNode : nodes) { eventSubProcessNode.addEvent((EventTypeFilter) filter); final String signalType = type; ExceptionScope exceptionScope = (ExceptionScope) ((ContextContainer) eventSubProcessNode.getNodeContainer()).getDefaultContext(ExceptionScope.EXCEPTION_SCOPE); if (exceptionScope == null) { exceptionScope = new ExceptionScope(); ((ContextContainer) eventSubProcessNode.getNodeContainer()).addContext(exceptionScope); ((ContextContainer) eventSubProcessNode.getNodeContainer()).setDefaultContext(exceptionScope); String type = "RuleFlowStateEventSubProcess-Event-" + processId + "-" + eventSubProcessNode.getUniqueId(); EventTypeFilter eventTypeFilter = new EventTypeFilter(); eventTypeFilter.setType(type); eventSubProcessNode.addEvent(eventTypeFilter);
@Override public void signalEvent(String type, Object event) { if (getNodeInstanceContainer().getNodeInstances().contains(this) || type.startsWith("Error-") || type.equals("timerTriggered") ) { // start it only if it was not already started - meaning there are node instances if (this.getNodeInstances().isEmpty()) { StartNode startNode = getCompositeNode().findStartNode(); if (resolveVariables(((EventSubProcessNode) getEventBasedNode()).getEvents()).contains(type) || type.equals("timerTriggered")) { NodeInstance nodeInstance = getNodeInstance(startNode); ((StartNodeInstance) nodeInstance).signalEvent(type, event); } } } super.signalEvent(type, event); }
@Override public void nodeInstanceCompleted(org.jbpm.workflow.instance.NodeInstance nodeInstance, String outType) { if (nodeInstance instanceof EndNodeInstance) { if (getCompositeNode().isKeepActive()) { StartNode startNode = getCompositeNode().findStartNode(); triggerCompleted(true); if (startNode.isInterrupting()) { String faultName = getProcessInstance().getOutcome()==null?"":getProcessInstance().getOutcome(); if (startNode.getMetaData("FaultCode") != null) { faultName = (String) startNode.getMetaData("FaultCode"); } if (getNodeInstanceContainer() instanceof ProcessInstance) { ((ProcessInstance) getProcessInstance()).setState(ProcessInstance.STATE_ABORTED, faultName); } else { ((NodeInstanceContainer) getNodeInstanceContainer()).setState( ProcessInstance.STATE_ABORTED); } } } } else { throw new IllegalArgumentException( "Completing a node instance that has no outgoing connection not supported."); } }
EventTypeFilter eventFilter = new NonAcceptingEventTypeFilter(); eventFilter.setType("Compensation"); espNode.addEvent(eventFilter);
@Override protected String getActivationType() { return "RuleFlowStateEventSubProcess-" + getProcessInstance().getProcessId() + "-" + getCompositeNode().getUniqueId(); }
public StartNode findStartNode() { for (Node node: getNodes()) { if (node instanceof StartNode) { StartNode startNode = (StartNode) node; return startNode; } } return null; }
eventNodeInstance.signalEvent(type, event); } else { if (node instanceof EventSubProcessNode && ((resolveVariables(((EventSubProcessNode) node).getEvents()).contains(type)))) { EventSubProcessNodeInstance eventNodeInstance = (EventSubProcessNodeInstance) getNodeInstance(node); eventNodeInstance.signalEvent(type, event);