/* * Created on 13/Nov/2004 * */ package net.sourceforge.fenixedu.applicationTier.Servico.student; import pt.ist.fenixWebFramework.services.Service; import pt.ist.fenixWebFramework.security.accessControl.Checked; import java.util.Iterator; import java.util.List; import net.sourceforge.fenixedu.applicationTier.FenixService; import net.sourceforge.fenixedu.applicationTier.Servico.exceptions.ExistingServiceException; import net.sourceforge.fenixedu.applicationTier.Servico.exceptions.FenixServiceException; import net.sourceforge.fenixedu.applicationTier.Servico.exceptions.InvalidArgumentsServiceException; import net.sourceforge.fenixedu.applicationTier.Servico.exceptions.InvalidChangeServiceException; import net.sourceforge.fenixedu.applicationTier.Servico.exceptions.InvalidSituationServiceException; import net.sourceforge.fenixedu.applicationTier.Servico.exceptions.InvalidStudentNumberServiceException; import net.sourceforge.fenixedu.applicationTier.Servico.exceptions.NotAuthorizedException; import net.sourceforge.fenixedu.applicationTier.strategy.groupEnrolment.strategys.GroupEnrolmentStrategyFactory; import net.sourceforge.fenixedu.applicationTier.strategy.groupEnrolment.strategys.IGroupEnrolmentStrategy; import net.sourceforge.fenixedu.applicationTier.strategy.groupEnrolment.strategys.IGroupEnrolmentStrategyFactory; import net.sourceforge.fenixedu.domain.Attends; import net.sourceforge.fenixedu.domain.Grouping; import net.sourceforge.fenixedu.domain.Shift; import net.sourceforge.fenixedu.domain.StudentGroup; import net.sourceforge.fenixedu.domain.student.Registration; /** * @author joaosa and rmalo * */ public class UnEnrollGroupShift extends FenixService { @Checked("RolePredicates.STUDENT_PREDICATE") @Service public static Boolean run(Integer studentGroupCode, Integer groupPropertiesCode, String username) throws FenixServiceException { Grouping groupProperties = rootDomainObject.readGroupingByOID(groupPropertiesCode); if (groupProperties == null) { throw new ExistingServiceException(); } StudentGroup studentGroup = rootDomainObject.readStudentGroupByOID(studentGroupCode); if (studentGroup == null) throw new InvalidArgumentsServiceException(); if (!(studentGroup.getShift() != null && groupProperties.getShiftType() == null) || studentGroup.getShift() == null) { throw new InvalidStudentNumberServiceException(); } Registration registration = Registration.readByUsername(username); IGroupEnrolmentStrategyFactory enrolmentGroupPolicyStrategyFactory = GroupEnrolmentStrategyFactory.getInstance(); IGroupEnrolmentStrategy strategy = enrolmentGroupPolicyStrategyFactory.getGroupEnrolmentStrategyInstance(groupProperties); if (!strategy.checkStudentInGrouping(groupProperties, username)) { throw new NotAuthorizedException(); } if (!checkStudentInStudentGroup(registration, studentGroup)) { throw new InvalidSituationServiceException(); } Shift shift = null; boolean result = strategy.checkNumberOfGroups(groupProperties, shift); if (!result) { throw new InvalidChangeServiceException(); } studentGroup.setShift(shift); return true; } private static boolean checkStudentInStudentGroup(Registration registration, StudentGroup studentGroup) { boolean found = false; List studentGroupAttends = studentGroup.getAttends(); Attends attend = null; Iterator iterStudentGroupAttends = studentGroupAttends.iterator(); while (iterStudentGroupAttends.hasNext() && !found) { attend = ((Attends) iterStudentGroupAttends.next()); if (attend.getRegistration().equals(registration)) { found = true; } } return found; } }