public ChangesByState getChangesByStateForRoot(TaskType rootTask, ModelInteractionService modelInteractionService, PrismContext prismContext, Task task, OperationResult result)
throws SchemaException, ObjectNotFoundException {
ChangesByState rv = new ChangesByState(prismContext);
recordChanges(rv, rootTask.getModelOperationContext(), modelInteractionService, task, result);
for (TaskType subtask : rootTask.getSubtask()) {
recordChanges(rv, subtask.getModelOperationContext(), modelInteractionService, task, result);
final WfContextType wfc = subtask.getWorkflowContext();
if (wfc != null && wfc.getProcessInstanceId() != null) {
Boolean isApproved = ApprovalUtils.approvalBooleanValueFromUri(wfc.getOutcome());
if (isApproved == null) {
if (wfc.getEndTimestamp() == null) {
recordChangesWaitingToBeApproved(rv, wfc, prismContext);
} else {
recordChangesCanceled(rv, wfc, prismContext);
}
} else if (isApproved) {
recordChangesApprovedIfNeeded(rv, subtask, rootTask, prismContext);
} else {
recordChangesRejected(rv, wfc, prismContext);
}
}
}
return rv;
}