/** * 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; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Locale; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import org.fenixedu.academic.domain.curricularPeriod.CurricularPeriod; import org.fenixedu.academic.domain.degree.degreeCurricularPlan.DegreeCurricularPlanState; import org.fenixedu.academic.domain.degreeStructure.Context; import org.fenixedu.academic.domain.degreeStructure.CourseGroup; import org.fenixedu.academic.domain.degreeStructure.CurricularCourseFunctor; import org.fenixedu.academic.domain.degreeStructure.CurricularStage; import org.fenixedu.academic.domain.degreeStructure.CycleCourseGroup; import org.fenixedu.academic.domain.degreeStructure.CycleType; import org.fenixedu.academic.domain.degreeStructure.ProgramConclusion; import org.fenixedu.academic.domain.degreeStructure.RootCourseGroup; import org.fenixedu.academic.domain.exceptions.DomainException; import org.fenixedu.academic.util.MarkType; import org.fenixedu.academic.util.MultiLanguageString; import org.fenixedu.bennu.core.domain.Bennu; import org.fenixedu.bennu.core.groups.Group; public class EmptyDegreeCurricularPlan extends EmptyDegreeCurricularPlan_Base { private static volatile EmptyDegreeCurricularPlan instance = null; private EmptyDegreeCurricularPlan() { super(); setRootDomainObject(Bennu.getInstance()); } @Override public boolean isEmpty() { return true; } public static EmptyDegreeCurricularPlan getInstance() { if (instance == null) { synchronized (EmptyDegreeCurricularPlan.class) { if (instance == null) { for (final DegreeCurricularPlan iter : Bennu.getInstance().getDegreeCurricularPlansSet()) { if (iter.isEmpty()) { instance = (EmptyDegreeCurricularPlan) iter; } } } } } return instance; } public static synchronized void init() { synchronized (EmptyDegreeCurricularPlan.class) { final EmptyDegreeCurricularPlan existing = getInstance(); if (existing == null) { final EmptyDegreeCurricularPlan newinstance = new EmptyDegreeCurricularPlan(); newinstance.setNameOnSuper("Plano Curricular de Unidades Isoladas"); newinstance.setDegreeOnSuper(EmptyDegree.getInstance()); RootCourseGroup.createRoot(newinstance, newinstance.getName(), newinstance.getName()); instance = newinstance; } } } private void setDegreeOnSuper(final Degree degree) { super.setDegree(degree); } public void setNameOnSuper(final String name) { super.setName(name); } @Override public void edit(String name, DegreeCurricularPlanState state, Date inicialDate, Date endDate, Integer degreeDuration, Integer minimalYearForOptionalCourses, Double neededCredits, MarkType markType, Integer numerusClausus, String annotation, GradeScale gradeScale) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public void edit(String name, CurricularStage curricularStage, DegreeCurricularPlanState state, GradeScale gradeScale, ExecutionYear beginExecutionYear) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public boolean isBolonhaDegree() { return true; } @Override public CurricularStage getCurricularStage() { return CurricularStage.APPROVED; } @Override public void delete() { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public Integer getMinimalYearForOptionalCourses() { return null; } @Override public GradeScale getGradeScaleChain() { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public Set<ExecutionCourse> getExecutionCoursesByExecutionPeriod(ExecutionSemester executionSemester) { return Collections.emptySet(); } @Override public SortedSet<DegreeModuleScope> getDegreeModuleScopes() { return new TreeSet<DegreeModuleScope>(); } @Override public Set<DegreeModuleScope> getDegreeModuleScopesFor(final Integer year, final Integer semester) { return getDegreeModuleScopes(); } @Override public Set<DegreeModuleScope> getDegreeModuleScopesFor(final ExecutionYear executionYear) { return getDegreeModuleScopes(); } @Override public void addExecutionCoursesForExecutionPeriod(final Set<ExecutionCourse> executionCourses, final ExecutionSemester executionSemester, final Set<Context> contexts) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public List<ExecutionCourse> getExecutionCoursesByExecutionPeriodAndSemesterAndYear(ExecutionSemester executionSemester, Integer curricularYear, Integer semester) { return Collections.emptyList(); } @Override public Set<CurricularCourse> getAllCurricularCourses() { return Collections.emptySet(); } @Override public List<CurricularCourse> getCurricularCoursesWithExecutionIn(ExecutionYear executionYear) { return Collections.emptyList(); } @Override public List<CurricularCourse> getCurricularCoursesByBasicAttribute(final Boolean basic) { return Collections.emptyList(); } @Override public EnrolmentPeriodInCurricularCourses getActualEnrolmentPeriod() { return null; } @Override public EnrolmentPeriodInCurricularCoursesSpecialSeason getActualEnrolmentPeriodInCurricularCoursesSpecialSeason() { return null; } @Override public boolean hasOpenEnrolmentPeriodInCurricularCoursesSpecialSeason(final ExecutionSemester executionSemester) { return false; } @Override public boolean hasOpenEnrolmentPeriodInCurricularCoursesFor(final ExecutionSemester executionSemester) { return false; } @Override public EnrolmentPeriodInCurricularCourses getNextEnrolmentPeriod() { return null; } @Override public EnrolmentPeriodInCurricularCoursesSpecialSeason getNextEnrolmentPeriodInCurricularCoursesSpecialSeason() { return null; } @Override public CandidacyPeriodInDegreeCurricularPlan getCurrentCandidacyPeriodInDCP() { return null; } @Override public CandidacyPeriodInDegreeCurricularPlan getCandidacyPeriod(final ExecutionYear executionYear) { return null; } @Override public boolean hasCandidacyPeriodFor(final ExecutionYear executionYear) { return false; } @Override public RegistrationPeriodInDegreeCurricularPlan getRegistrationPeriod(final ExecutionYear executionYear) { return null; } @Override public boolean hasRegistrationPeriodFor(final ExecutionYear executionYear) { return false; } @Override public Collection<ExecutionYear> getCandidacyPeriodsExecutionYears() { return Collections.emptySet(); } @Override public EnrolmentPeriodInCurricularCoursesSpecialSeason getEnrolmentPeriodInCurricularCoursesSpecialSeasonByExecutionPeriod( ExecutionSemester executionSemester) { return null; } @Override public EnrolmentPeriodInCurricularCourses getEnrolmentPeriodInCurricularCoursesBy(final ExecutionSemester executionSemester) { return null; } @Override public CurricularCourse getCurricularCourseByCode(String code) { return null; } @Override public CurricularCourse getCurricularCourseByAcronym(String acronym) { return null; } @Override public Set<CurricularCourse> getCurricularCoursesSet() { return Collections.emptySet(); } @Override public void doForAllCurricularCourses(final CurricularCourseFunctor curricularCourseFunctor) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public Set<CurricularCourse> getCurricularCourses(final ExecutionSemester executionSemester) { return Collections.emptySet(); } @Override public List<CompetenceCourse> getCompetenceCourses() { return Collections.emptyList(); } @Override public List<CompetenceCourse> getCompetenceCourses(ExecutionYear executionYear) { return getCompetenceCourses(); } @Override public List<Branch> getCommonAreas() { return Collections.emptyList(); } @Override public Set<CurricularCourse> getActiveCurricularCourses() { return Collections.emptySet(); } @Override public Set<CurricularCourse> getActiveCurricularCourses(final ExecutionSemester executionSemester) { return Collections.emptySet(); } @Override public List<CurricularCourseScope> getActiveCurricularCourseScopes() { return Collections.emptyList(); } @Override public CurricularCourse createCurricularCourse(String name, String code, String acronym, Boolean enrolmentAllowed, CurricularStage curricularStage) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public CourseGroup createCourseGroup(final CourseGroup parentCourseGroup, final String name, final String nameEn, final ExecutionSemester begin, final ExecutionSemester end) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public CurricularCourse createCurricularCourse(Double weight, String prerequisites, String prerequisitesEn, CurricularStage curricularStage, CompetenceCourse competenceCourse, CourseGroup parentCourseGroup, CurricularPeriod curricularPeriod, ExecutionSemester beginExecutionPeriod, ExecutionSemester endExecutionPeriod) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public CurricularCourse createOptionalCurricularCourse(CourseGroup parentCourseGroup, String name, String nameEn, CurricularStage curricularStage, CurricularPeriod curricularPeriod, ExecutionSemester beginExecutionPeriod, ExecutionSemester endExecutionPeriod) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public Boolean getUserCanBuild() { return false; } @Override public Boolean getCanModify() { return false; } @Override public void setCurricularPlanMembersGroup(Group curricularPlanMembersGroup) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public void setCurricularStage(CurricularStage curricularStage) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public void setDegree(Degree degree) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public void setRoot(RootCourseGroup courseGroup) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public void setDegreeStructure(CurricularPeriod degreeStructure) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public void setGradeScale(GradeScale gradeScale) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public void setName(String name) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public Set<CurricularCourseScope> findCurricularCourseScopesIntersectingPeriod(final Date beginDate, final Date endDate) { return Collections.emptySet(); } @Override public CurricularPeriod getCurricularPeriodFor(int year, int semester) { return null; } @Override public CurricularPeriod createCurricularPeriodFor(int year, int semester) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public DegreeCurricularPlanState getState() { return DegreeCurricularPlanState.ACTIVE; } @Override public Integer getDegreeDuration() { return null; } @Override public boolean isDegreeOrBolonhaDegreeOrBolonhaIntegratedMasterDegree() { return false; } @Override public boolean isFirstCycle() { return false; } @Override public CycleCourseGroup getFirstCycleCourseGroup() { return null; } @Override public boolean isSecondCycle() { return false; } @Override public CycleCourseGroup getSecondCycleCourseGroup() { return null; } @Override public CycleCourseGroup getThirdCycleCourseGroup() { return null; } @Override public CycleCourseGroup getCycleCourseGroup(final CycleType cycleType) { return null; } @Override public CycleCourseGroup getLastOrderedCycleCourseGroup() { return null; } @Override public String getGraduateTitle(final ExecutionYear executionYear, final ProgramConclusion programConclusion, final Locale locale) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public List<CurricularCourse> getDissertationCurricularCourses(ExecutionYear year) { return Collections.emptyList(); } @Override public List<CurricularCourse> getDissertationCurricularCourses() { return Collections.emptyList(); } @Override public DegreeCurricularPlanEquivalencePlan createEquivalencePlan(final DegreeCurricularPlan sourceDegreeCurricularPlan) { throw new DomainException("EmptyDegreeCurricularPlan.not.available"); } @Override public Set<CurricularCourse> getCurricularCoursesByExecutionYearAndCurricularYear(ExecutionYear eY, Integer cY) { return Collections.emptySet(); } @Override public Boolean getApplyPreviousYearsEnrolmentRule() { return Boolean.FALSE; } @Override public Set<DegreeCurricularPlanEquivalencePlan> getTargetEquivalencePlans() { return Collections.emptySet(); } @Override final public MultiLanguageString getDescriptionI18N() { return new MultiLanguageString(); } @Override public List<CycleCourseGroup> getDestinationAffinities(final CycleType sourceCycleType) { return Collections.emptyList(); } /* * Since empty degrees do not have execution degrees, this method must * always return true */ @Override public boolean hasExecutionDegreeFor(ExecutionYear executionYear) { return true; } @Override public int getDurationInYears() { return 0; } @Override public int getDurationInSemesters() { return 0; } @Override public int getDurationInYears(CycleType cycleType) { return 0; } @Override public int getDurationInSemesters(CycleType cycleType) { return 0; } }