final Set<SActivityDefinition> activityDefList = processContainer.getActivities(); for (final SActivityDefinition sActivityDefinition : activityDefList) { if (activityName.equals(sActivityDefinition.getName())) { sdataDefinitionList = sActivityDefinition.getSDataDefinitions(); activityFound = true; break;
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 handleEventSubProcess(final SProcessDefinition sDefinition, final SProcessInstance parentProcessInstance) throws SBonitaException { final Set<SActivityDefinition> activities = sDefinition.getProcessContainer().getActivities(); for (final SActivityDefinition activity : activities) { if (SFlowNodeType.SUB_PROCESS.equals(activity.getType()) && ((SSubProcessDefinition) activity).isTriggeredByEvent()) { final SSubProcessDefinition eventSubProcess = (SSubProcessDefinition) activity; final SStartEventDefinition sStartEventDefinition = eventSubProcess.getSubProcessContainer().getStartEvents().get(0); handleEventSubProcess(sDefinition, sStartEventDefinition, activity.getId(), parentProcessInstance); } } }
public SLoopActivityInstanceBuilder createLoopActivityInstance(final long processDefinitionId, final long rootContainerId, final long parentContainerId, final long rootProcessInstanceId, final long parentProcessInstanceId, final SActivityDefinition activityDefinition) { return BuilderFactory.get(SLoopActivityInstanceBuilderFactory.class).createNewOuterTaskInstance( activityDefinition.getName(), activityDefinition.getId(), rootContainerId, parentContainerId, processDefinitionId, rootProcessInstanceId, parentProcessInstanceId); }
protected void createDataInstancesForMultiInstance(final SActivityDefinition activityDefinition, final SFlowNodeInstance flowNodeInstance, final SExpressionContext expressionContext) throws SDataInstanceException, SExpressionException { final SLoopCharacteristics loopCharacteristics = activityDefinition.getLoopCharacteristics(); final SMultiInstanceLoopCharacteristics miLoop = (SMultiInstanceLoopCharacteristics) loopCharacteristics; createBusinessDataInstancesForMultiInstance(activityDefinition, flowNodeInstance, miLoop); createDataInstances(activityDefinition.getSDataDefinitions(), flowNodeInstance.getId(), DataInstanceContainer.ACTIVITY_INSTANCE, expressionContext, miLoop.getLoopDataInputRef(), flowNodeInstance.getLoopCounter(), miLoop.getDataInputItemRef(), flowNodeInstance.getParentContainerId()); }
private SGatewayDefinition getGatewayFromSubProcesses(final String name) { boolean found = false; SGatewayDefinition gateway = null; final Iterator<SActivityDefinition> iterator = activities.iterator(); while (iterator.hasNext() && !found) { final SActivityDefinition activityDefinition = iterator.next(); if (SFlowNodeType.SUB_PROCESS.equals(activityDefinition.getType())) { gateway = ((SSubProcessDefinition) activityDefinition).getSubProcessContainer().getGateway(name); if (gateway != null) { found = true; } } } return gateway; }
intTxflowNodeInstance.getFlowNodeDefinitionId()); if (activityDef != null && !activityDef.getSDataDefinitions().isEmpty()) { if (activityDef != null && !activityDef.getConnectors().isEmpty()) { archiveConnectors(connectorInstanceService, archiveDate, intTxflowNodeInstance.getId(), SConnectorInstance.FLOWNODE_TYPE);
private List<SDataDefinition> getTransientData(long containerId) throws SFlowNodeNotFoundException, SFlowNodeReadException, SProcessDefinitionNotFoundException, SBonitaReadException { SFlowNodeInstance flowNodeInstance = flowNodeInstanceService.getFlowNodeInstance(containerId); final long flowNodeDefinitionId = flowNodeInstance.getFlowNodeDefinitionId(); final long processDefinitionId = flowNodeInstance.getProcessDefinitionId(); final SProcessDefinition processDefinition = processDefinitionService.getProcessDefinition(processDefinitionId); final SActivityDefinition flowNode = (SActivityDefinition) processDefinition.getProcessContainer() .getFlowNode(flowNodeDefinitionId); return flowNode.getSDataDefinitions() .stream() .filter(SDataDefinition::isTransientData) .collect(Collectors.toList()); }
private boolean isChildOfLoopOrMultiInstance(final SActivityInstance activityInstance, final SActivityDefinition activityDefinition) { return activityDefinition.getLoopCharacteristics() != null && !(SFlowNodeType.MULTI_INSTANCE_ACTIVITY.equals(activityInstance.getType()) || SFlowNodeType.LOOP_ACTIVITY.equals(activityInstance.getType())); }
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; }
private void reevaluateTransientData(final String name, final long containerId, final String containerType) throws SProcessDefinitionNotFoundException, SBonitaReadException, SFlowNodeNotFoundException, SFlowNodeReadException, SDataInstanceException, SExpressionException { SFlowNodeInstance flowNodeInstance = flowNodeInstanceService.getFlowNodeInstance(containerId); final long flowNodeDefinitionId = flowNodeInstance.getFlowNodeDefinitionId(); final long processDefinitionId = flowNodeInstance.getProcessDefinitionId(); final SProcessDefinition processDefinition = processDefinitionService.getProcessDefinition(processDefinitionId); final SActivityDefinition flowNode = (SActivityDefinition) processDefinition.getProcessContainer() .getFlowNode(flowNodeDefinitionId); SDataDefinition dataDefinition = getTransientData(containerId).stream() .filter(data -> Objects.equals(name, data.getName())) .findFirst() .orElseThrow(() -> new SDataInstanceNotFoundException( "Transient data was not found and we were unable to reevaluate it because it was not found in the definition, name=<" + name + "> process definition=<" + processDefinition.getName() + "," + processDefinition.getVersion() + "> flow node=<" + flowNode.getName() + ">")); createDataInstance(dataDefinition, containerId, DataInstanceContainer.ACTIVITY_INSTANCE, new SExpressionContext(containerId, containerType, processDefinitionId)); }
public void handleBoundaryEvent(final SProcessDefinition processDefinition, final SBoundaryEventInstance boundaryInstance) throws SActivityStateExecutionException { final long activityInstanceId = boundaryInstance.getActivityInstanceId(); // FIXME: add activity name in SBoundaryEventInstance to avoid the getActivityInstance below try { final SActivityInstance activityInstance = activityInstanceService.getActivityInstance(activityInstanceId); final SActivityDefinition activityDefinition = (SActivityDefinition) processDefinition.getProcessContainer().getFlowNode( activityInstance.getFlowNodeDefinitionId()); final SBoundaryEventDefinition boundaryEventDefinition = activityDefinition.getBoundaryEventDefinition(boundaryInstance.getName()); eventsHandler.handleCatchEvent(processDefinition, boundaryEventDefinition, boundaryInstance); } catch (final SBonitaException e) { throw new SActivityStateExecutionException("unable to handle catch event " + boundaryInstance, e); } }
public void executeOperations(final SProcessDefinition processDefinition, final SActivityInstance activityInstance) throws SActivityStateExecutionException { try { final SFlowElementContainerDefinition processContainer = processDefinition.getProcessContainer(); final SFlowNodeDefinition flowNode = processContainer.getFlowNode(activityInstance.getFlowNodeDefinitionId()); if (flowNode instanceof SActivityDefinition) { final SActivityDefinition activityDefinition = (SActivityDefinition) flowNode; final List<SOperation> sOperations = activityDefinition.getSOperations(); final SExpressionContext sExpressionContext = new SExpressionContext(activityInstance.getId(), DataInstanceContainer.ACTIVITY_INSTANCE.name(), processDefinition.getId()); operationService.execute(sOperations, sExpressionContext); } } catch (final SOperationExecutionException e) { throw new SActivityStateExecutionException(e); } }
private void createBusinessDataInstancesForMultiInstance(SActivityDefinition activityDefinition, SFlowNodeInstance flowNodeInstance, SMultiInstanceLoopCharacteristics miLoop) throws SDataInstanceException { final SBusinessDataDefinition outputBusinessData = activityDefinition.getBusinessDataDefinition(miLoop.getDataOutputItemRef()); final SRefBusinessDataInstanceBuilderFactory instanceFactory = BuilderFactory.get(SRefBusinessDataInstanceBuilderFactory.class); if (outputBusinessData != null) { final SRefBusinessDataInstance outputRefInstance = instanceFactory.createNewInstanceForFlowNode(outputBusinessData.getName(), flowNodeInstance.getId(), null, outputBusinessData.getClassName()).done(); addRefBusinessData(outputRefInstance); } final SBusinessDataDefinition inputBusinessData = activityDefinition.getBusinessDataDefinition(miLoop.getDataInputItemRef()); if (inputBusinessData != null) { try { final SMultiRefBusinessDataInstance loopDataRefInstance = (SMultiRefBusinessDataInstance) refBusinessDataService.getRefBusinessDataInstance( miLoop.getLoopDataInputRef(), flowNodeInstance.getParentProcessInstanceId()); final List<Long> dataIds = loopDataRefInstance.getDataIds(); final SRefBusinessDataInstance inputRefInstance = instanceFactory.createNewInstanceForFlowNode(inputBusinessData.getName(), flowNodeInstance.getId(), dataIds.get(flowNodeInstance.getLoopCounter()), inputBusinessData.getClassName()).done(); addRefBusinessData(inputRefInstance); } catch (final SRefBusinessDataInstanceNotFoundException | SBonitaReadException e) { throw new SDataInstanceException(e); } } }
protected void createDataInstancesForMultiInstance(final SActivityDefinition activityDefinition, final SFlowNodeInstance flowNodeInstance, final SExpressionContext expressionContext) throws SDataInstanceException, SExpressionException { final SLoopCharacteristics loopCharacteristics = activityDefinition.getLoopCharacteristics(); final SMultiInstanceLoopCharacteristics miLoop = (SMultiInstanceLoopCharacteristics) loopCharacteristics; createBusinessDataInstancesForMultiInstance(activityDefinition, flowNodeInstance, miLoop); createDataInstances(activityDefinition.getSDataDefinitions(), flowNodeInstance.getId(), DataInstanceContainer.ACTIVITY_INSTANCE, expressionContext, miLoop.getLoopDataInputRef(), flowNodeInstance.getLoopCounter(), miLoop.getDataInputItemRef(), flowNodeInstance.getParentContainerId()); }
public SLoopActivityInstanceBuilder createLoopActivityInstance(final long processDefinitionId, final long rootContainerId, final long parentContainerId, final long rootProcessInstanceId, final long parentProcessInstanceId, final SActivityDefinition activityDefinition) { return BuilderFactory.get(SLoopActivityInstanceBuilderFactory.class).createNewOuterTaskInstance( activityDefinition.getName(), activityDefinition.getId(), rootContainerId, parentContainerId, processDefinitionId, rootProcessInstanceId, parentProcessInstanceId); }
private STransitionDefinition getTransitionFromSubProcesses(final String transitionId) { boolean found = false; STransitionDefinition transition = null; final Iterator<SActivityDefinition> iterator = activities.iterator(); while (iterator.hasNext() && !found) { final SActivityDefinition activityDefinition = iterator.next(); if (SFlowNodeType.SUB_PROCESS.equals(activityDefinition.getType())) { transition = ((SSubProcessDefinition) activityDefinition).getSubProcessContainer().getTransition(transitionId); if (transition != null) { found = true; } } } return transition; }
intTxflowNodeInstance.getFlowNodeDefinitionId()); if (activityDef != null && !activityDef.getSDataDefinitions().isEmpty()) { if (activityDef != null && !activityDef.getConnectors().isEmpty()) { archiveConnectors(connectorInstanceService, archiveDate, intTxflowNodeInstance.getId(), SConnectorInstance.FLOWNODE_TYPE);
private List<SDataDefinition> getTransientData(long containerId) throws SFlowNodeNotFoundException, SFlowNodeReadException, SProcessDefinitionNotFoundException, SBonitaReadException { SFlowNodeInstance flowNodeInstance = flowNodeInstanceService.getFlowNodeInstance(containerId); final long flowNodeDefinitionId = flowNodeInstance.getFlowNodeDefinitionId(); final long processDefinitionId = flowNodeInstance.getProcessDefinitionId(); final SProcessDefinition processDefinition = processDefinitionService.getProcessDefinition(processDefinitionId); final SActivityDefinition flowNode = (SActivityDefinition) processDefinition.getProcessContainer() .getFlowNode(flowNodeDefinitionId); return flowNode.getSDataDefinitions() .stream() .filter(SDataDefinition::isTransientData) .collect(Collectors.toList()); }
private boolean isChildOfLoopOrMultiInstance(final SActivityInstance activityInstance, final SActivityDefinition activityDefinition) { return activityDefinition.getLoopCharacteristics() != null && !(SFlowNodeType.MULTI_INSTANCE_ACTIVITY.equals(activityInstance.getType()) || SFlowNodeType.LOOP_ACTIVITY.equals(activityInstance.getType())); }