/*
* Created on 3/Dez/2003
*
*/
package net.sourceforge.fenixedu.applicationTier.Servico.manager;
import java.util.ArrayList;
import java.util.List;
import net.sourceforge.fenixedu.applicationTier.FenixService;
import net.sourceforge.fenixedu.applicationTier.Servico.exceptions.FenixServiceException;
import net.sourceforge.fenixedu.applicationTier.Servico.exceptions.InvalidArgumentsServiceException;
import net.sourceforge.fenixedu.dataTransferObject.InfoExecutionCourse;
import net.sourceforge.fenixedu.domain.CurricularCourse;
import net.sourceforge.fenixedu.domain.Degree;
import net.sourceforge.fenixedu.domain.DegreeCurricularPlan;
import net.sourceforge.fenixedu.domain.ExecutionCourse;
import net.sourceforge.fenixedu.domain.ExecutionDegree;
import net.sourceforge.fenixedu.domain.time.calendarStructure.AcademicInterval;
import pt.ist.fenixWebFramework.services.Service;
/**
* @author Joćo Mota 3/Dez/2003
*
*/
public class ReadExecutionCoursesByDegreeAndExecutionPeriodId extends FenixService {
@Service
public static List run(Integer degreeId, AcademicInterval academicInterval) throws FenixServiceException {
final List infoExecutionCourses = new ArrayList();
if (academicInterval == null) {
throw new InvalidArgumentsServiceException();
}
final Degree degree = rootDomainObject.readDegreeByOID(degreeId);
if (degree == null) {
throw new InvalidArgumentsServiceException();
}
final ExecutionDegree executionDegree = findExecutionDegree(academicInterval, degree);
if (executionDegree != null) {
final DegreeCurricularPlan degreeCurricularPlan = executionDegree.getDegreeCurricularPlan();
for (final ExecutionCourse executionCourse : ExecutionCourse.filterByAcademicInterval(academicInterval)) {
if (satisfiesCriteria(executionCourse, degreeCurricularPlan)) {
infoExecutionCourses.add(InfoExecutionCourse.newInfoFromDomain(executionCourse));
}
}
}
return infoExecutionCourses;
}
private static ExecutionDegree findExecutionDegree(final AcademicInterval academicInterval, final Degree degree) {
List all = ExecutionDegree.filterByAcademicInterval(academicInterval);
for (ExecutionDegree executionDegree : all) {
if (executionDegree.getDegree().equals(degree))
return executionDegree;
}
return null;
}
private static boolean satisfiesCriteria(final ExecutionCourse executionCourse,
final DegreeCurricularPlan degreeCurricularPlan) {
for (final CurricularCourse curricularCourse : executionCourse.getAssociatedCurricularCourses()) {
if (curricularCourse.getDegreeCurricularPlan() == degreeCurricularPlan) {
return true;
}
}
return false;
}
}