private void deleteProcessInstanceCascade(ExecutionEntity execution, String deleteReason, boolean deleteHistory) {
CommandContext commandContext = Context.getCommandContext();
ProcessInstanceQueryImpl processInstanceQuery = new ProcessInstanceQueryImpl(commandContext);
List<ProcessInstance> subProcesses = processInstanceQuery.superProcessInstanceId(execution.getProcessInstanceId()).list();
for (ProcessInstance subProcess : subProcesses) {
deleteProcessInstanceCascade((ExecutionEntity) subProcess, deleteReason, deleteHistory);
}
commandContext
.getTaskEntityManager()
.deleteTasksByProcessInstanceId(execution.getId(), deleteReason, deleteHistory);
if (deleteReason == null) {
deleteReason = "ACTIVITY_DELETED";
}
if (commandContext.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) {
commandContext.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createCancelledEvent(execution.getProcessInstanceId(),
execution.getProcessInstanceId(), execution.getProcessDefinitionId(), deleteReason));
}
execution.deleteCascade(deleteReason);
if (deleteHistory) {
commandContext
.getHistoricProcessInstanceEntityManager()
.deleteHistoricProcessInstanceById(execution.getId());
}
}