public void interruptAttachedBoundaryEvent(final SProcessDefinition processDefinition, final SActivityInstance activityInstance, final SStateCategory categoryState) throws SActivityStateExecutionException { final SBoundaryEventInstanceBuilderFactory keyProvider = BuilderFactory.get(SBoundaryEventInstanceBuilderFactory.class); try { final List<SBoundaryEventInstance> boundaryEventInstances = eventInstanceService.getActivityBoundaryEventInstances(activityInstance.getId(), 0, QueryOptions.UNLIMITED_NUMBER_OF_RESULTS); for (final SBoundaryEventInstance boundaryEventInstance : boundaryEventInstances) { // don't abort boundary event that put this activity in aborting state if (activityInstance.getAbortedByBoundary() != boundaryEventInstance.getId()) { final boolean stable = boundaryEventInstance.isStable(); final SCatchEventDefinition catchEventDef = processDefinition.getProcessContainer().getBoundaryEvent(boundaryEventInstance.getName()); waitingEventsInterrupter.interruptWaitingEvents(processDefinition, boundaryEventInstance, catchEventDef); activityInstanceService.setStateCategory(boundaryEventInstance, categoryState); if (stable) { containerRegistry.executeFlowNode(processDefinition.getId(), boundaryEventInstance.getLogicalGroup(keyProvider.getParentProcessInstanceIndex()), boundaryEventInstance.getId()); } } } } catch (final SBonitaException e) { throw new SActivityStateExecutionException("Unable cancel boundary events attached to activity " + activityInstance.getName(), e); } }
public void interruptAttachedBoundaryEvent(final SProcessDefinition processDefinition, final SActivityInstance activityInstance, final SStateCategory categoryState) throws SActivityStateExecutionException { final SBoundaryEventInstanceBuilderFactory keyProvider = BuilderFactory.get(SBoundaryEventInstanceBuilderFactory.class); try { final List<SBoundaryEventInstance> boundaryEventInstances = eventInstanceService.getActivityBoundaryEventInstances(activityInstance.getId(), 0, QueryOptions.UNLIMITED_NUMBER_OF_RESULTS); for (final SBoundaryEventInstance boundaryEventInstance : boundaryEventInstances) { // don't abort boundary event that put this activity in aborting state if (activityInstance.getAbortedByBoundary() != boundaryEventInstance.getId()) { final boolean stable = boundaryEventInstance.isStable(); final SCatchEventDefinition catchEventDef = processDefinition.getProcessContainer().getBoundaryEvent(boundaryEventInstance.getName()); waitingEventsInterrupter.interruptWaitingEvents(processDefinition, boundaryEventInstance, catchEventDef); activityInstanceService.setStateCategory(boundaryEventInstance, categoryState); if (stable) { containerRegistry.executeFlowNode(processDefinition.getId(), boundaryEventInstance.getLogicalGroup(keyProvider.getParentProcessInstanceIndex()), boundaryEventInstance.getId()); } } } } catch (final SBonitaException e) { throw new SActivityStateExecutionException("Unable cancel boundary events attached to activity " + activityInstance.getName(), e); } }
@Override public OperationsWithContext getOperations(final SWaitingEvent waitingEvent, final Long triggeringElementID) throws SBonitaException { final SMessageInstance messageInstance = getEventInstanceService().getMessageInstance(triggeringElementID); final SProcessDefinition processDefinition = processDefinitionService.getProcessDefinition(waitingEvent.getProcessDefinitionId()); final SExpressionContext context = new SExpressionContext(messageInstance.getId(), DataInstanceContainer.MESSAGE_INSTANCE.name(), processDefinition.getId()); final SFlowElementContainerDefinition processContainer = processDefinition.getProcessContainer(); final SFlowNodeDefinition targetFlowNode = processContainer.getFlowNode(waitingEvent.getFlowNodeName()); SCatchMessageEventTriggerDefinition messageEventTrigger; if (targetFlowNode instanceof SReceiveTaskDefinition) { messageEventTrigger = ((SReceiveTaskDefinition) targetFlowNode).getTrigger(); } else { SCatchEventDefinition catchEvent; if (SBPMEventType.BOUNDARY_EVENT.equals(waitingEvent.getEventType())) { catchEvent = processContainer.getBoundaryEvent(messageInstance.getTargetFlowNode()); } else { catchEvent = (SCatchEventDefinition) targetFlowNode; } messageEventTrigger = catchEvent.getMessageEventTriggerDefinition(messageInstance.getMessageName()); } final List<SOperation> operations = messageEventTrigger.getOperations(); return new OperationsWithContext(context, operations); }
@Override public OperationsWithContext getOperations(final SWaitingEvent waitingEvent, final Long triggeringElementID) throws SBonitaException { final SMessageInstance messageInstance = getEventInstanceService().getMessageInstance(triggeringElementID); final SProcessDefinition processDefinition = processDefinitionService.getProcessDefinition(waitingEvent.getProcessDefinitionId()); final SExpressionContext context = new SExpressionContext(messageInstance.getId(), DataInstanceContainer.MESSAGE_INSTANCE.name(), processDefinition.getId()); final SFlowElementContainerDefinition processContainer = processDefinition.getProcessContainer(); final SFlowNodeDefinition targetFlowNode = processContainer.getFlowNode(waitingEvent.getFlowNodeName()); SCatchMessageEventTriggerDefinition messageEventTrigger; if (targetFlowNode instanceof SReceiveTaskDefinition) { messageEventTrigger = ((SReceiveTaskDefinition) targetFlowNode).getTrigger(); } else { SCatchEventDefinition catchEvent; if (SBPMEventType.BOUNDARY_EVENT.equals(waitingEvent.getEventType())) { catchEvent = processContainer.getBoundaryEvent(messageInstance.getTargetFlowNode()); } else { catchEvent = (SCatchEventDefinition) targetFlowNode; } messageEventTrigger = catchEvent.getMessageEventTriggerDefinition(messageInstance.getMessageName()); } final List<SOperation> operations = messageEventTrigger.getOperations(); return new OperationsWithContext(context, operations); }