@Atomic private Map<ExecutionDegree, Integer> setFirstYearShiftsCapacity( Boolean toBlock, ExecutionYear executionYear) { final ExecutionSemester executionSemester = executionYear.getFirstExecutionPeriod(); final Map<Shift, Set<ExecutionDegree>> shiftsDegrees = new HashMap<Shift, Set<ExecutionDegree>>(); final Set<Shift> shifts = new HashSet<Shift>(); final Map<ExecutionDegree, Integer> modified = new HashMap<ExecutionDegree, Integer>(); for (final Degree degree : Degree.readAllByDegreeType( DegreeType.BOLONHA_DEGREE, DegreeType.BOLONHA_INTEGRATED_MASTER_DEGREE)) { for (final DegreeCurricularPlan degreeCurricularPlan : degree.getActiveDegreeCurricularPlans()) { final ExecutionDegree executionDegree = degreeCurricularPlan.getExecutionDegreeByAcademicInterval( executionSemester.getExecutionYear().getAcademicInterval()); if (executionDegree != null) { for (final SchoolClass schoolClass : executionDegree.getSchoolClassesSet()) { if (schoolClass.getAnoCurricular().equals(FIRST_CURRICULAR_YEAR) && schoolClass.getExecutionPeriod() == executionSemester) { for (final Shift shift : schoolClass.getAssociatedShiftsSet()) { Set<ExecutionDegree> executionDegrees = shiftsDegrees.get(shift); if (executionDegrees == null) { executionDegrees = new HashSet<ExecutionDegree>(); } executionDegrees.add(executionDegree); shiftsDegrees.put(shift, executionDegrees); shifts.add(shift); } } } } } } for (final Shift shift : shifts) { int capacity = shift.getLotacao().intValue(); if (toBlock && capacity > 0) { shift.setLotacao(capacity * -1); } else if (!toBlock && capacity < 0) { shift.setLotacao(capacity * -1); } else { continue; } for (ExecutionDegree executionDegree : shiftsDegrees.get(shift)) { if (modified.containsKey(executionDegree)) { modified.put(executionDegree, modified.get(executionDegree) + 1); } else { modified.put(executionDegree, 1); } } } if (modified.size() > 0) { new FirstYearShiftsCapacityToggleLog( executionYear.getFirstExecutionPeriod(), Authenticate.getUser().getPerson().getUser()); } return modified; }