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 boolean createDataInstances(final SActivityDefinition activityDefinition, final SFlowNodeInstance flowNodeInstance, final SExpressionContext expressionContext) throws SActivityStateExecutionException { final List<SDataDefinition> sDataDefinitions = activityDefinition.getSDataDefinitions(); final SLoopCharacteristics loopCharacteristics = activityDefinition.getLoopCharacteristics(); try { if (loopCharacteristics instanceof SMultiInstanceLoopCharacteristics && (((SMultiInstanceLoopCharacteristics) loopCharacteristics).getDataInputItemRef() != null || ((SMultiInstanceLoopCharacteristics) loopCharacteristics).getDataOutputItemRef() != null)) { createDataInstancesForMultiInstance(activityDefinition, flowNodeInstance, expressionContext); } else { createDataInstances(sDataDefinitions, flowNodeInstance.getId(), DataInstanceContainer.ACTIVITY_INSTANCE, expressionContext); } if (!sDataDefinitions.isEmpty() && logger.isLoggable(this.getClass(), TechnicalLogSeverity.DEBUG)) { final String message = "Initialized variables for flow node" + LogMessageBuilder.buildFlowNodeContextMessage(flowNodeInstance); logger.log(this.getClass(), TechnicalLogSeverity.DEBUG, message); } return sDataDefinitions.size() > 0; } catch (final SBonitaException e) { throw new SActivityStateExecutionException(e); } }
private boolean createDataInstances(final SActivityDefinition activityDefinition, final SFlowNodeInstance flowNodeInstance, final SExpressionContext expressionContext) throws SActivityStateExecutionException { final List<SDataDefinition> sDataDefinitions = activityDefinition.getSDataDefinitions(); final SLoopCharacteristics loopCharacteristics = activityDefinition.getLoopCharacteristics(); try { if (loopCharacteristics instanceof SMultiInstanceLoopCharacteristics && (((SMultiInstanceLoopCharacteristics) loopCharacteristics).getDataInputItemRef() != null || ((SMultiInstanceLoopCharacteristics) loopCharacteristics).getDataOutputItemRef() != null)) { createDataInstancesForMultiInstance(activityDefinition, flowNodeInstance, expressionContext); } else { createDataInstances(sDataDefinitions, flowNodeInstance.getId(), DataInstanceContainer.ACTIVITY_INSTANCE, expressionContext); } if (!sDataDefinitions.isEmpty() && logger.isLoggable(this.getClass(), TechnicalLogSeverity.DEBUG)) { final String message = "Initialized variables for flow node" + LogMessageBuilder.buildFlowNodeContextMessage(flowNodeInstance); logger.log(this.getClass(), TechnicalLogSeverity.DEBUG, message); } return sDataDefinitions.size() > 0; } catch (final SBonitaException e) { throw new SActivityStateExecutionException(e); } }
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); } } } }
@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); } }
@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); } } } }
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); } } }
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); } } }