boolean isBusinessData(final SProcessDefinition processDefinition, final SMultiInstanceLoopCharacteristics miLoop) { final SFlowElementContainerDefinition processContainer = processDefinition.getProcessContainer(); final SBusinessDataDefinition businessData = processContainer.getBusinessDataDefinition(miLoop.getLoopDataOutputRef()); return businessData != null; }
boolean isBusinessData(final SProcessDefinition processDefinition, final SMultiInstanceLoopCharacteristics miLoop) { final SFlowElementContainerDefinition processContainer = processDefinition.getProcessContainer(); final SBusinessDataDefinition businessData = processContainer.getBusinessDataDefinition(miLoop.getLoopDataOutputRef()); return businessData != null; }
private void MapMultiInstanceBusinessDataOutput(final SFlowNodeInstance flowNodeInstance, final SMultiInstanceLoopCharacteristics miLoop) throws SRefBusinessDataInstanceNotFoundException, SBonitaReadException, SRefBusinessDataInstanceModificationException { final SRefBusinessDataInstance outputMIRef = refBusinessDataService.getFlowNodeRefBusinessDataInstance( miLoop.getDataOutputItemRef(), flowNodeInstance.getId()); final SRefBusinessDataInstance outputMILoopRef = refBusinessDataService.getRefBusinessDataInstance( miLoop.getLoopDataOutputRef(), flowNodeInstance.getParentProcessInstanceId()); final SMultiRefBusinessDataInstance multiRefBusinessDataInstance = (SMultiRefBusinessDataInstance) outputMILoopRef; List<Long> dataIds = multiRefBusinessDataInstance.getDataIds(); if (dataIds == null) { dataIds = new ArrayList<>(); } final Long dataId = ((SFlowNodeSimpleRefBusinessDataInstance) outputMIRef).getDataId(); dataIds.add(dataId); refBusinessDataService.updateRefBusinessDataInstance(multiRefBusinessDataInstance, dataIds); }
private void MapMultiInstanceBusinessDataOutput(final SFlowNodeInstance flowNodeInstance, final SMultiInstanceLoopCharacteristics miLoop) throws SRefBusinessDataInstanceNotFoundException, SBonitaReadException, SRefBusinessDataInstanceModificationException { final SRefBusinessDataInstance outputMIRef = refBusinessDataService.getFlowNodeRefBusinessDataInstance( miLoop.getDataOutputItemRef(), flowNodeInstance.getId()); final SRefBusinessDataInstance outputMILoopRef = refBusinessDataService.getRefBusinessDataInstance( miLoop.getLoopDataOutputRef(), flowNodeInstance.getParentProcessInstanceId()); final SMultiRefBusinessDataInstance multiRefBusinessDataInstance = (SMultiRefBusinessDataInstance) outputMILoopRef; List<Long> dataIds = multiRefBusinessDataInstance.getDataIds(); if (dataIds == null) { dataIds = new ArrayList<>(); } final Long dataId = ((SFlowNodeSimpleRefBusinessDataInstance) outputMIRef).getDataId(); dataIds.add(dataId); refBusinessDataService.updateRefBusinessDataInstance(multiRefBusinessDataInstance, dataIds); }
private SMultiInstanceActivityInstanceBuilder createMultiInstanceActivityInstance(final long processDefinitionId, final long rootContainerId, final long parentContainerId, final long rootProcessInstanceId, final long parentProcessInstanceId, final SActivityDefinition activityDefinition, final SMultiInstanceLoopCharacteristics loopCharacteristics) { final SMultiInstanceActivityInstanceBuilder builder = BuilderFactory.get(SMultiInstanceActivityInstanceBuilderFactory.class) .createNewOuterTaskInstance( activityDefinition.getName(), activityDefinition.getId(), rootContainerId, parentContainerId, processDefinitionId, rootProcessInstanceId, parentProcessInstanceId, loopCharacteristics.isSequential()); builder.setLoopDataInputRef(loopCharacteristics.getLoopDataInputRef()); builder.setLoopDataOutputRef(loopCharacteristics.getLoopDataOutputRef()); builder.setDataInputItemRef(loopCharacteristics.getDataInputItemRef()); builder.setDataOutputItemRef(loopCharacteristics.getDataOutputItemRef()); return builder; }
private SMultiInstanceActivityInstanceBuilder createMultiInstanceActivityInstance(final long processDefinitionId, final long rootContainerId, final long parentContainerId, final long rootProcessInstanceId, final long parentProcessInstanceId, final SActivityDefinition activityDefinition, final SMultiInstanceLoopCharacteristics loopCharacteristics) { final SMultiInstanceActivityInstanceBuilder builder = BuilderFactory.get(SMultiInstanceActivityInstanceBuilderFactory.class) .createNewOuterTaskInstance( activityDefinition.getName(), activityDefinition.getId(), rootContainerId, parentContainerId, processDefinitionId, rootProcessInstanceId, parentProcessInstanceId, loopCharacteristics.isSequential()); builder.setLoopDataInputRef(loopCharacteristics.getLoopDataInputRef()); builder.setLoopDataOutputRef(loopCharacteristics.getLoopDataOutputRef()); builder.setDataInputItemRef(loopCharacteristics.getDataInputItemRef()); builder.setDataOutputItemRef(loopCharacteristics.getDataOutputItemRef()); return builder; }
public void mapDataOutputOfMultiInstance(final SProcessDefinition processDefinition, final SFlowNodeInstance flowNodeInstance) throws SActivityStateExecutionException { if (flowNodeInstance instanceof SActivityInstance && !SFlowNodeType.MULTI_INSTANCE_ACTIVITY.equals(flowNodeInstance.getType())) { final SFlowElementContainerDefinition processContainer = processDefinition.getProcessContainer(); final SActivityDefinition activityDefinition = (SActivityDefinition) processContainer.getFlowNode(flowNodeInstance.getFlowNodeDefinitionId()); if (activityDefinition != null) {// can be null if the activity was added in runtime try { final SLoopCharacteristics loopCharacteristics = activityDefinition.getLoopCharacteristics(); if (loopCharacteristics instanceof SMultiInstanceLoopCharacteristics && ((SMultiInstanceLoopCharacteristics) loopCharacteristics).getDataOutputItemRef() != null) { final SMultiInstanceLoopCharacteristics miLoop = (SMultiInstanceLoopCharacteristics) loopCharacteristics; final SBusinessDataDefinition businessData = processContainer.getBusinessDataDefinition(miLoop.getLoopDataOutputRef()); if (businessData == null) { mapDataOutputOfMultiInstance(flowNodeInstance, miLoop); } else { MapMultiInstanceBusinessDataOutput(flowNodeInstance, miLoop); } } } catch (final SBonitaException sbe) { throw new SActivityStateExecutionException(sbe); } } } }
public void updateOutputData(final SProcessDefinition processDefinition, final SFlowNodeInstance flowNodeInstance, final SMultiInstanceLoopCharacteristics miLoop, final int numberOfInstanceMax) throws SDataInstanceException, SActivityStateExecutionException { if (!isBusinessData(processDefinition, miLoop)) { final String loopDataOutputRef = miLoop.getLoopDataOutputRef(); if (loopDataOutputRef != null) { final SDataInstance loopDataOutput = dataInstanceService.getDataInstance(loopDataOutputRef, flowNodeInstance.getId(), DataInstanceContainer.ACTIVITY_INSTANCE.name(), parentContainerResolver); if (loopDataOutput != null) { final Serializable outValue = loopDataOutput.getValue(); if (outValue instanceof List) { updateLoopDataOutputWithListContent((List<?>) outValue, loopDataOutput, numberOfInstanceMax); } else if (outValue == null) { updateLoopDataOutputWithNull(loopDataOutput, numberOfInstanceMax); } else { throw new SActivityStateExecutionException("The multi instance on activity " + flowNodeInstance.getName() + " of process " + processDefinition.getName() + " " + processDefinition.getVersion() + " have a loop data output which is not a java.util.List"); } } } } }
public void updateOutputData(final SProcessDefinition processDefinition, final SFlowNodeInstance flowNodeInstance, final SMultiInstanceLoopCharacteristics miLoop, final int numberOfInstanceMax) throws SDataInstanceException, SActivityStateExecutionException { if (!isBusinessData(processDefinition, miLoop)) { final String loopDataOutputRef = miLoop.getLoopDataOutputRef(); if (loopDataOutputRef != null) { final SDataInstance loopDataOutput = dataInstanceService.getDataInstance(loopDataOutputRef, flowNodeInstance.getId(), DataInstanceContainer.ACTIVITY_INSTANCE.name(), parentContainerResolver); if (loopDataOutput != null) { final Serializable outValue = loopDataOutput.getValue(); if (outValue instanceof List) { updateLoopDataOutputWithListContent((List<?>) outValue, loopDataOutput, numberOfInstanceMax); } else if (outValue == null) { updateLoopDataOutputWithNull(loopDataOutput, numberOfInstanceMax); } else { throw new SActivityStateExecutionException("The multi instance on activity " + flowNodeInstance.getName() + " of process " + processDefinition.getName() + " " + processDefinition.getVersion() + " have a loop data output which is not a java.util.List"); } } } } }
@SuppressWarnings("unchecked") public void mapDataOutputOfMultiInstance(final SFlowNodeInstance flowNodeInstance, final SMultiInstanceLoopCharacteristics miLoop) throws SBonitaException { final SDataInstance outputData = dataInstanceService.getDataInstance(miLoop.getDataOutputItemRef(), flowNodeInstance.getId(), DataInstanceContainer.ACTIVITY_INSTANCE.name(), parentContainerResolver); final SDataInstance loopData = dataInstanceService.getDataInstance(miLoop.getLoopDataOutputRef(), flowNodeInstance.getId(), DataInstanceContainer.ACTIVITY_INSTANCE.name(), parentContainerResolver); if (outputData != null && loopData != null) { final Serializable value = loopData.getValue(); final int index = flowNodeInstance.getLoopCounter(); if (value instanceof List<?>) { ((List<Serializable>) value).set(index, outputData.getValue()); } else { throw new SActivityExecutionException("unable to map the ouput of the multi instanciated activity " + flowNodeInstance.getName() + " the output loop data named " + loopData.getName() + " is not a list but " + loopData.getClassName()); } final EntityUpdateDescriptor entityUpdateDescriptor = new EntityUpdateDescriptor(); entityUpdateDescriptor.addField("value", value); dataInstanceService.updateDataInstance(loopData, entityUpdateDescriptor); } }
public void mapDataOutputOfMultiInstance(final SProcessDefinition processDefinition, final SFlowNodeInstance flowNodeInstance) throws SActivityStateExecutionException { if (flowNodeInstance instanceof SActivityInstance && !SFlowNodeType.MULTI_INSTANCE_ACTIVITY.equals(flowNodeInstance.getType())) { final SFlowElementContainerDefinition processContainer = processDefinition.getProcessContainer(); final SActivityDefinition activityDefinition = (SActivityDefinition) processContainer.getFlowNode(flowNodeInstance.getFlowNodeDefinitionId()); if (activityDefinition != null) {// can be null if the activity was added in runtime try { final SLoopCharacteristics loopCharacteristics = activityDefinition.getLoopCharacteristics(); if (loopCharacteristics instanceof SMultiInstanceLoopCharacteristics && ((SMultiInstanceLoopCharacteristics) loopCharacteristics).getDataOutputItemRef() != null) { final SMultiInstanceLoopCharacteristics miLoop = (SMultiInstanceLoopCharacteristics) loopCharacteristics; final SBusinessDataDefinition businessData = processContainer.getBusinessDataDefinition(miLoop.getLoopDataOutputRef()); if (businessData == null) { mapDataOutputOfMultiInstance(flowNodeInstance, miLoop); } else { MapMultiInstanceBusinessDataOutput(flowNodeInstance, miLoop); } } } catch (final SBonitaException sbe) { throw new SActivityStateExecutionException(sbe); } } } }
@SuppressWarnings("unchecked") public void mapDataOutputOfMultiInstance(final SFlowNodeInstance flowNodeInstance, final SMultiInstanceLoopCharacteristics miLoop) throws SBonitaException { final SDataInstance outputData = dataInstanceService.getDataInstance(miLoop.getDataOutputItemRef(), flowNodeInstance.getId(), DataInstanceContainer.ACTIVITY_INSTANCE.name(), parentContainerResolver); final SDataInstance loopData = dataInstanceService.getDataInstance(miLoop.getLoopDataOutputRef(), flowNodeInstance.getId(), DataInstanceContainer.ACTIVITY_INSTANCE.name(), parentContainerResolver); if (outputData != null && loopData != null) { final Serializable value = loopData.getValue(); final int index = flowNodeInstance.getLoopCounter(); if (value instanceof List<?>) { ((List<Serializable>) value).set(index, outputData.getValue()); } else { throw new SActivityExecutionException("unable to map the ouput of the multi instanciated activity " + flowNodeInstance.getName() + " the output loop data named " + loopData.getName() + " is not a list but " + loopData.getClassName()); } final EntityUpdateDescriptor entityUpdateDescriptor = new EntityUpdateDescriptor(); entityUpdateDescriptor.addField("value", value); dataInstanceService.updateDataInstance(loopData, entityUpdateDescriptor); } }