private List<AccessCertificationResponseType> getOutcomesFromCompletedStages(AccessCertificationCaseType aCase,
Integer additionalStageNumber, AccessCertificationResponseType additionalStageResponse) {
LOGGER.trace("getOutcomesFromCompletedStages: additionalStageNumber={}, additionalStageResponse={}", additionalStageNumber, additionalStageResponse);
SetValuedMap<Integer, AccessCertificationResponseType> allOutcomes = new HashSetValuedHashMap<>();
for (CaseEventType event : aCase.getEvent()) {
if (event instanceof StageCompletionEventType) {
StageCompletionEventType stageCompletionEvent = (StageCompletionEventType) event;
if (event.getStageNumber() == null) {
throw new IllegalStateException("Missing stage number in StageCompletionEventType: " + event);
}
allOutcomes.put(event.getStageNumber(), normalizeToNonNull(fromUri(stageCompletionEvent.getOutcome())));
}
}
if (additionalStageNumber != null) {
allOutcomes.put(additionalStageNumber, normalizeToNonNull(additionalStageResponse));
}
List<AccessCertificationResponseType> rv = new ArrayList<>();
for (Integer stage : allOutcomes.keySet()) {
Set<AccessCertificationResponseType> stageOutcomes = allOutcomes.get(stage);
addIgnoreNull(rv, extractStageOutcome(stageOutcomes, aCase.getId(), stage));
}
return rv;
}