private boolean mustAddBoundaryEvents(final SActivityInstance activityInstance, final SActivityDefinition activityDefinition) { // avoid to add boundary events in children of multi instance return activityDefinition != null && !activityDefinition.getBoundaryEventDefinitions().isEmpty() && !isChildOfLoopOrMultiInstance(activityInstance, activityDefinition); }
private boolean mustAddBoundaryEvents(final SActivityInstance activityInstance, final SActivityDefinition activityDefinition) { // avoid to add boundary events in children of multi instance return activityDefinition != null && !activityDefinition.getBoundaryEventDefinitions().isEmpty() && !isChildOfLoopOrMultiInstance(activityInstance, activityDefinition); }
public void addActivity(final SActivityDefinition activity) { sBoundaryEvents.addAll(activity.getBoundaryEventDefinitions()); for (final SBoundaryEventDefinition boundary : activity.getBoundaryEventDefinitions()) { sBoundaryEvents.add(boundary); allElements.add(boundary); allElementsMap.put(boundary.getId(), boundary); } activities.add(activity); addFlowNode(activity); if (activity instanceof SSubProcessDefinition) { addSubProcess((SSubProcessDefinition) activity); } }
public void addActivity(final SActivityDefinition activity) { sBoundaryEvents.addAll(activity.getBoundaryEventDefinitions()); for (final SBoundaryEventDefinition boundary : activity.getBoundaryEventDefinitions()) { sBoundaryEvents.add(boundary); allElements.add(boundary); allElementsMap.put(boundary.getId(), boundary); } activities.add(activity); addFlowNode(activity); if (activity instanceof SSubProcessDefinition) { addSubProcess((SSubProcessDefinition) activity); } }
@Override public boolean shouldExecuteState(final SProcessDefinition processDefinition, final SFlowNodeInstance flowNodeInstance) { final SActivityDefinition activityDef = (SActivityDefinition) processDefinition.getProcessContainer().getFlowNode( flowNodeInstance.getFlowNodeDefinitionId()); return !activityDef.getBoundaryEventDefinitions().isEmpty(); }
@Override public boolean shouldExecuteState(final SProcessDefinition processDefinition, final SFlowNodeInstance flowNodeInstance) { final SActivityDefinition activityDef = (SActivityDefinition) processDefinition.getProcessContainer().getFlowNode( flowNodeInstance.getFlowNodeDefinitionId()); return !activityDef.getBoundaryEventDefinitions().isEmpty(); }
@Override public StateCode execute(final SProcessDefinition processDefinition, final SFlowNodeInstance instance) throws SActivityStateExecutionException { final SActivityDefinition activityDef = (SActivityDefinition) processDefinition.getProcessContainer().getFlowNode(instance.getFlowNodeDefinitionId()); if (!activityDef.getBoundaryEventDefinitions().isEmpty()) { final SActivityInstance activityInstance = (SActivityInstance) instance; stateBehaviors.interruptAttachedBoundaryEvent(processDefinition, activityInstance, getBoundaryCategoryState()); } return StateCode.DONE; }
@Override public StateCode execute(final SProcessDefinition processDefinition, final SFlowNodeInstance instance) throws SActivityStateExecutionException { final SActivityDefinition activityDef = (SActivityDefinition) processDefinition.getProcessContainer().getFlowNode(instance.getFlowNodeDefinitionId()); if (!activityDef.getBoundaryEventDefinitions().isEmpty()) { final SActivityInstance activityInstance = (SActivityInstance) instance; stateBehaviors.interruptAttachedBoundaryEvent(processDefinition, activityInstance, getBoundaryCategoryState()); } return StateCode.DONE; }
private void createAttachedBoundaryEvents(final SProcessDefinition processDefinition, final SActivityInstance activityInstance, final SActivityDefinition activityDefinition) throws SActivityStateExecutionException { final List<SBoundaryEventDefinition> boundaryEventDefinitions = activityDefinition.getBoundaryEventDefinitions(); try { final SBoundaryEventInstanceBuilderFactory boundaryEventInstanceBuilder = BuilderFactory .get(SBoundaryEventInstanceBuilderFactory.class); final long rootProcessInstanceId = activityInstance.getLogicalGroup(boundaryEventInstanceBuilder.getRootProcessInstanceIndex()); final long parentProcessInstanceId = activityInstance.getLogicalGroup(boundaryEventInstanceBuilder.getParentProcessInstanceIndex()); final SFlowElementsContainerType containerType = getContainerType(activityInstance, boundaryEventInstanceBuilder); for (final SBoundaryEventDefinition boundaryEventDefinition : boundaryEventDefinitions) { createBoundaryEvent(processDefinition, activityInstance, rootProcessInstanceId, parentProcessInstanceId, containerType, boundaryEventDefinition); } } catch (final SBonitaException e) { throw new SActivityStateExecutionException("Unable to create boundary events attached to activity " + activityInstance.getName(), e); } }
private void createAttachedBoundaryEvents(final SProcessDefinition processDefinition, final SActivityInstance activityInstance, final SActivityDefinition activityDefinition) throws SActivityStateExecutionException { final List<SBoundaryEventDefinition> boundaryEventDefinitions = activityDefinition.getBoundaryEventDefinitions(); try { final SBoundaryEventInstanceBuilderFactory boundaryEventInstanceBuilder = BuilderFactory .get(SBoundaryEventInstanceBuilderFactory.class); final long rootProcessInstanceId = activityInstance.getLogicalGroup(boundaryEventInstanceBuilder.getRootProcessInstanceIndex()); final long parentProcessInstanceId = activityInstance.getLogicalGroup(boundaryEventInstanceBuilder.getParentProcessInstanceIndex()); final SFlowElementsContainerType containerType = getContainerType(activityInstance, boundaryEventInstanceBuilder); for (final SBoundaryEventDefinition boundaryEventDefinition : boundaryEventDefinitions) { createBoundaryEvent(processDefinition, activityInstance, rootProcessInstanceId, parentProcessInstanceId, containerType, boundaryEventDefinition); } } catch (final SBonitaException e) { throw new SActivityStateExecutionException("Unable to create boundary events attached to activity " + activityInstance.getName(), e); } }
protected SWaitingErrorEvent getWaitingErrorEventFromBoundary(final SThrowEventInstance eventInstance, final String errorCode, final SFlowNodeInstance flowNodeInstance) throws SBonitaException { final SFlowNodeInstanceBuilderFactory flowNodeKeyProvider = BuilderFactory.get(SBoundaryEventInstanceBuilderFactory.class); // get the parent activity of the boundary final long logicalGroup = eventInstance.getLogicalGroup(flowNodeKeyProvider.getParentActivityInstanceIndex()); if (logicalGroup <= 0) { // not in an activity = no boundary return null; } final long processDefinitionId = flowNodeInstance.getLogicalGroup(flowNodeKeyProvider.getProcessDefinitionIndex()); final SProcessDefinition processDefinition = processDefinitionService.getProcessDefinition(processDefinitionId); final SActivityDefinition flowNode = (SActivityDefinition) processDefinition.getProcessContainer().getFlowNode( flowNodeInstance.getFlowNodeDefinitionId()); final List<SBoundaryEventDefinition> boundaryEventDefinitions = flowNode.getBoundaryEventDefinitions(); SWaitingErrorEvent waitingErrorEvent; if (flowNode.getLoopCharacteristics() == null) { waitingErrorEvent = getWaitingErrorEventFromBoundary(errorCode, flowNodeInstance, boundaryEventDefinitions); } else { final long multipleInstanceActivityId = flowNodeInstance.getLogicalGroup(flowNodeKeyProvider.getParentActivityInstanceIndex()); final SFlowNodeInstance miActivityInstance = flowNodeInstanceService.getFlowNodeInstance(multipleInstanceActivityId); waitingErrorEvent = getWaitingErrorEventFromBoundary(errorCode, miActivityInstance, boundaryEventDefinitions); } return waitingErrorEvent; }
protected SWaitingErrorEvent getWaitingErrorEventFromBoundary(final SThrowEventInstance eventInstance, final String errorCode, final SFlowNodeInstance flowNodeInstance) throws SBonitaException { final SFlowNodeInstanceBuilderFactory flowNodeKeyProvider = BuilderFactory.get(SBoundaryEventInstanceBuilderFactory.class); // get the parent activity of the boundary final long logicalGroup = eventInstance.getLogicalGroup(flowNodeKeyProvider.getParentActivityInstanceIndex()); if (logicalGroup <= 0) { // not in an activity = no boundary return null; } final long processDefinitionId = flowNodeInstance.getLogicalGroup(flowNodeKeyProvider.getProcessDefinitionIndex()); final SProcessDefinition processDefinition = processDefinitionService.getProcessDefinition(processDefinitionId); final SActivityDefinition flowNode = (SActivityDefinition) processDefinition.getProcessContainer().getFlowNode( flowNodeInstance.getFlowNodeDefinitionId()); final List<SBoundaryEventDefinition> boundaryEventDefinitions = flowNode.getBoundaryEventDefinitions(); SWaitingErrorEvent waitingErrorEvent; if (flowNode.getLoopCharacteristics() == null) { waitingErrorEvent = getWaitingErrorEventFromBoundary(errorCode, flowNodeInstance, boundaryEventDefinitions); } else { final long multipleInstanceActivityId = flowNodeInstance.getLogicalGroup(flowNodeKeyProvider.getParentActivityInstanceIndex()); final SFlowNodeInstance miActivityInstance = flowNodeInstanceService.getFlowNodeInstance(multipleInstanceActivityId); waitingErrorEvent = getWaitingErrorEventFromBoundary(errorCode, miActivityInstance, boundaryEventDefinitions); } return waitingErrorEvent; }