Map<ExecutionDegree, CurricularYearList> degreeMap = extractCourses(parameter);
// Step 1, Remove non-existing references
for (Iterator<OccupationPeriodReference> references = getReferences().iterator(); references.hasNext();) {
OccupationPeriodReference reference = references.next();
if (!degreeMap.containsKey(reference.getExecutionDegree())) {
reference.delete();
references.remove();
}
}
// Step 2, Add new references, and update old ones
for (final Entry<ExecutionDegree, CurricularYearList> entry : degreeMap.entrySet()) {
OccupationPeriodReference reference = null;
for (OccupationPeriodReference ref : getReferences()) {
if (ref.getExecutionDegree().equals(entry.getKey())) {
reference = ref;
break;
}
}
if (reference == null) {
references.add(new OccupationPeriodReference(occupationPeriod, entry.getKey(), occupationPeriodType, semester,
entry.getValue()));
} else {
reference.setOccupationPeriod(occupationPeriod);
reference.setPeriodType(occupationPeriodType);
reference.setSemester(semester);
reference.setCurricularYears(entry.getValue());
}
}
}