package net.sourceforge.fenixedu.applicationTier.Servico.teacherServiceDistribution; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sourceforge.fenixedu.applicationTier.FenixService; import net.sourceforge.fenixedu.dataTransferObject.teacherServiceDistribution.TSDTeacherDTOEntry; import net.sourceforge.fenixedu.domain.ExecutionSemester; import net.sourceforge.fenixedu.domain.Teacher; import net.sourceforge.fenixedu.domain.teacherServiceDistribution.TSDProcessPhase; import net.sourceforge.fenixedu.domain.teacherServiceDistribution.TSDRealTeacher; import net.sourceforge.fenixedu.domain.teacherServiceDistribution.TSDTeacher; import net.sourceforge.fenixedu.domain.teacherServiceDistribution.TeacherServiceDistribution; import pt.utl.ist.fenix.tools.util.Pair; public class ReadTSDTeachersFromTSDProcesses extends FenixService { public List run(Map> tsdProcessIdMap) { List tsdTeacherDTOEntryList = new ArrayList(); Map teacherDTOMap = new HashMap(); for (Integer tsdProcessPhaseId : tsdProcessIdMap.keySet()) { TSDProcessPhase tsdProcessPhase = rootDomainObject.readTSDProcessPhaseByOID(tsdProcessPhaseId); TeacherServiceDistribution tsd = null; tsd = rootDomainObject.readTeacherServiceDistributionByOID(tsdProcessIdMap.get(tsdProcessPhaseId).getKey()); List executionPeriodList = getExecutionPeriodList(tsd, tsdProcessIdMap.get(tsdProcessPhaseId) .getValue()); List tsdTeacherList = new ArrayList(tsd.getTSDTeachers()); for (TSDTeacher tsdTeacher : tsdTeacherList) { if (tsdTeacher instanceof TSDRealTeacher && teacherDTOMap.containsKey(((TSDRealTeacher) tsdTeacher).getTeacher())) { TSDTeacherDTOEntry tsdTeacherDTOEntry = teacherDTOMap.get(((TSDRealTeacher) tsdTeacher).getTeacher()); tsdTeacherDTOEntry.addExecutionPeriodList(executionPeriodList); tsdTeacherDTOEntry.addTSDTeacher(tsdTeacher); } else { TSDTeacherDTOEntry tsdTeacherDTOEntry = new TSDTeacherDTOEntry(tsdTeacher, executionPeriodList); tsdTeacherDTOEntryList.add(tsdTeacherDTOEntry); if (tsdTeacher instanceof TSDRealTeacher) { teacherDTOMap.put(((TSDRealTeacher) tsdTeacher).getTeacher(), tsdTeacherDTOEntry); } } } } return tsdTeacherDTOEntryList; } private List getExecutionPeriodList(TeacherServiceDistribution tsd, Integer executionPeriodId) { List executionPeriodList = new ArrayList(); ExecutionSemester executionSemester = rootDomainObject.readExecutionSemesterByOID(executionPeriodId); if (executionSemester != null) { executionPeriodList.add(executionSemester); } else { executionPeriodList.addAll(tsd.getTSDProcessPhase().getTSDProcess().getExecutionPeriods()); } return executionPeriodList; } }