private void executeGateway(final SProcessDefinition sProcessDefinition, final STransitionDefinition sTransitionDefinition, final SFlowNodeInstance flowNodeThatTriggeredTheTransition) throws SBonitaException { final long parentProcessInstanceId = flowNodeThatTriggeredTheTransition.getParentProcessInstanceId(); final long rootProcessInstanceId = flowNodeThatTriggeredTheTransition.getRootProcessInstanceId(); final SFlowNodeDefinition sFlowNodeDefinition = processDefinitionService.getNextFlowNode(sProcessDefinition, String.valueOf(sTransitionDefinition.getId())); try { List<SGatewayInstance> gatewaysToExecute = new ArrayList<>(1); final SProcessInstance parentProcessInstance = processInstanceService.getProcessInstance(parentProcessInstanceId); final SStateCategory stateCategory = parentProcessInstance.getStateCategory(); final SGatewayInstance gatewayInstance = getActiveGatewayOrCreateIt(sProcessDefinition, sFlowNodeDefinition, stateCategory, parentProcessInstanceId, rootProcessInstanceId); gatewayInstanceService.hitTransition(gatewayInstance, sFlowNodeDefinition.getTransitionIndex(sTransitionDefinition.getId())); if (gatewayInstanceService.checkMergingCondition(sProcessDefinition, gatewayInstance)) { gatewaysToExecute.add(gatewayInstance); gatewaysToExecute.addAll(gatewayInstanceService.setFinishAndCreateNewGatewayForRemainingToken(sProcessDefinition, gatewayInstance)); } for (final SGatewayInstance gatewayToExecute : gatewaysToExecute) { executeFlowNode(gatewayToExecute.getId(), null, null); } } catch (final SBonitaException e) { setExceptionContext(sProcessDefinition, flowNodeThatTriggeredTheTransition, e); logger.log(this.getClass(), TechnicalLogSeverity.ERROR, e); throw e; } }
private void executeGateway(final SProcessDefinition sProcessDefinition, final STransitionDefinition sTransitionDefinition, final SFlowNodeInstance flowNodeThatTriggeredTheTransition) throws SBonitaException { final long parentProcessInstanceId = flowNodeThatTriggeredTheTransition.getParentProcessInstanceId(); final long rootProcessInstanceId = flowNodeThatTriggeredTheTransition.getRootProcessInstanceId(); final SFlowNodeDefinition sFlowNodeDefinition = processDefinitionService.getNextFlowNode(sProcessDefinition, String.valueOf(sTransitionDefinition.getId())); try { List<SGatewayInstance> gatewaysToExecute = new ArrayList<>(1); final SProcessInstance parentProcessInstance = processInstanceService.getProcessInstance(parentProcessInstanceId); final SStateCategory stateCategory = parentProcessInstance.getStateCategory(); final SGatewayInstance gatewayInstance = getActiveGatewayOrCreateIt(sProcessDefinition, sFlowNodeDefinition, stateCategory, parentProcessInstanceId, rootProcessInstanceId); gatewayInstanceService.hitTransition(gatewayInstance, sFlowNodeDefinition.getTransitionIndex(sTransitionDefinition.getId())); if (gatewayInstanceService.checkMergingCondition(sProcessDefinition, gatewayInstance)) { gatewaysToExecute.add(gatewayInstance); gatewaysToExecute.addAll(gatewayInstanceService.setFinishAndCreateNewGatewayForRemainingToken(sProcessDefinition, gatewayInstance)); } for (final SGatewayInstance gatewayToExecute : gatewaysToExecute) { executeFlowNode(gatewayToExecute.getId(), null, null); } } catch (final SBonitaException e) { setExceptionContext(sProcessDefinition, flowNodeThatTriggeredTheTransition, e); logger.log(this.getClass(), TechnicalLogSeverity.ERROR, e); throw e; } }