/** * Copyright © 2002 Instituto Superior Técnico * * This file is part of FenixEdu Academic. * * FenixEdu Academic is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * FenixEdu Academic is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with FenixEdu Academic. If not, see <http://www.gnu.org/licenses/>. */ package org.fenixedu.academic.domain.curricularRules.executors.ruleExecutors; import java.util.HashMap; import java.util.Map; import org.fenixedu.academic.domain.curricularRules.AnyCurricularCourse; import org.fenixedu.academic.domain.curricularRules.AssertUniqueApprovalInCurricularCourseContexts; import org.fenixedu.academic.domain.curricularRules.CreditsLimit; import org.fenixedu.academic.domain.curricularRules.CreditsLimitInExternalCycle; import org.fenixedu.academic.domain.curricularRules.DegreeModulesSelectionLimit; import org.fenixedu.academic.domain.curricularRules.EnrolmentInSpecialSeasonEvaluation; import org.fenixedu.academic.domain.curricularRules.EnrolmentToBeApprovedByCoordinator; import org.fenixedu.academic.domain.curricularRules.EvenOddRule; import org.fenixedu.academic.domain.curricularRules.Exclusiveness; import org.fenixedu.academic.domain.curricularRules.ICurricularRule; import org.fenixedu.academic.domain.curricularRules.ImprovementOfApprovedEnrolment; import org.fenixedu.academic.domain.curricularRules.MaximumNumberOfCreditsForEnrolmentPeriod; import org.fenixedu.academic.domain.curricularRules.MaximumNumberOfECTSInSpecialSeasonEvaluation; import org.fenixedu.academic.domain.curricularRules.MaximumNumberOfEctsInStandaloneCurriculumGroup; import org.fenixedu.academic.domain.curricularRules.MinimumNumberOfCreditsToEnrol; import org.fenixedu.academic.domain.curricularRules.PreviousYearsEnrolmentCurricularRule; import org.fenixedu.academic.domain.curricularRules.RestrictionBetweenDegreeModules; import org.fenixedu.academic.domain.curricularRules.RestrictionDoneDegreeModule; import org.fenixedu.academic.domain.curricularRules.RestrictionEnroledDegreeModule; import org.fenixedu.academic.domain.curricularRules.RestrictionNotEnroledDegreeModule; import org.fenixedu.academic.domain.curricularRules.SeniorStatuteSpecialSeasonEnrolmentScope; import org.fenixedu.academic.domain.exceptions.DomainException; import org.fenixedu.academic.domain.phd.enrolments.PhdValidCurricularCoursesExecutor; import org.fenixedu.academic.domain.phd.enrolments.PhdValidCurricularCoursesRule; public class CurricularRuleExecutorFactory { private static Map<Class<? extends ICurricularRule>, CurricularRuleExecutor> executors = new HashMap<Class<? extends ICurricularRule>, CurricularRuleExecutor>(); static { executors.put(RestrictionDoneDegreeModule.class, new RestrictionDoneDegreeModuleExecutor()); executors.put(RestrictionEnroledDegreeModule.class, new RestrictionEnroledDegreeModuleExecutor()); executors.put(RestrictionNotEnroledDegreeModule.class, new RestrictionNotEnroledDegreeModuleExecutor()); executors.put(RestrictionBetweenDegreeModules.class, new RestrictionBetweenDegreeModulesExecutor()); executors.put(EnrolmentToBeApprovedByCoordinator.class, new EnrolmentToBeApprovedByCoordinatorExecutor()); executors.put(Exclusiveness.class, new ExclusivenessExecutor()); executors.put(MinimumNumberOfCreditsToEnrol.class, new MinimumNumberOfCreditsToEnrolExecutor()); executors.put(DegreeModulesSelectionLimit.class, new DegreeModulesSelectionLimitExecutor()); executors.put(CreditsLimit.class, new CreditsLimitExecutor()); executors.put(AnyCurricularCourse.class, new AnyCurricularCourseExecutor()); executors.put(MaximumNumberOfCreditsForEnrolmentPeriod.class, new MaximumNumberOfCreditsForEnrolmentPeriodExecutor()); executors.put(PreviousYearsEnrolmentCurricularRule.class, new PreviousYearsEnrolmentExecutor()); executors.put(AssertUniqueApprovalInCurricularCourseContexts.class, new AssertUniqueApprovalInCurricularCourseContextsExecutor()); executors.put(ImprovementOfApprovedEnrolment.class, new ImprovementOfApprovedEnrolmentExecutor()); executors.put(EnrolmentInSpecialSeasonEvaluation.class, new EnrolmentInSpecialSeasonEvaluationExecutor()); executors.put(MaximumNumberOfECTSInSpecialSeasonEvaluation.class, new MaximumNumberOfECTSInSpecialSeasonEvaluationExecutor()); executors.put(CreditsLimitInExternalCycle.class, new CreditsLimitInExternalCycleExecutor()); executors.put(EvenOddRule.class, new EvenOddExecuter()); executors.put(MaximumNumberOfEctsInStandaloneCurriculumGroup.class, new MaximumNumberOfEctsInStandaloneCurriculumGroupExecutor()); executors.put(PhdValidCurricularCoursesRule.class, new PhdValidCurricularCoursesExecutor()); executors.put(SeniorStatuteSpecialSeasonEnrolmentScope.class, new SeniorStatuteSpecialSeasonEnrolmentScopeExecutor()); } public static CurricularRuleExecutor findExecutor(final ICurricularRule curricularRule) { return findExecutor(curricularRule.getClass()); } public static CurricularRuleExecutor findExecutor(final Class<? extends ICurricularRule> clazz) { if (!executors.containsKey(clazz)) { throw new DomainException("error.curricularRules.RuleFactory.cannot.find.RuleExecutor.for.class", clazz.getName()); } return executors.get(clazz); } }