/**
* 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.candidacy;
import java.util.Locale;
import java.util.Optional;
import java.util.function.Predicate;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.bennu.core.domain.Bennu;
import org.fenixedu.commons.i18n.LocalizedString;
import pt.ist.fenixframework.Atomic;
import pt.ist.fenixframework.Atomic.TxMode;
public class IngressionType extends IngressionType_Base {
private IngressionType() {
super();
setRootDomainObject(Bennu.getInstance());
}
@Atomic(mode = TxMode.WRITE)
public static IngressionType createIngressionType(String code, LocalizedString description) {
IngressionType ingressionType = new IngressionType();
ingressionType.setCode(code);
ingressionType.setDescription(description);
return ingressionType;
}
public boolean hasEntryPhase() {
return getHasEntryPhase();
}
public String getLocalizedName() {
return getLocalizedName(Locale.getDefault());
}
public String getLocalizedName(Locale locale) {
return getCode() + " - " + getDescription().getContent(locale);
}
public static Optional<IngressionType> findIngressionTypeByCode(String name) {
Predicate<? super IngressionType> matchesName = ingressionType -> name.equals(ingressionType.getCode());
return Bennu.getInstance().getIngressionTypesSet().stream().filter(matchesName).findAny();
}
public static Optional<IngressionType> findByPredicate(Predicate<IngressionType> predicate) {
return Bennu.getInstance().getIngressionTypesSet().stream().filter(predicate).findAny();
}
//Checks if there is any other objects, besides the one being changed, for which the tested predicate returns true
private void checkUniqueWithPredicate(Predicate<IngressionType> predicate) {
Optional<IngressionType> findAny =
Bennu.getInstance().getIngressionTypesSet().stream()
.filter(predicate.and(ingressionType -> ingressionType != this)).findAny();
if (findAny.isPresent()) {
throw new DomainException("label.error.ingressionTypePredicateIsNotUnique");
}
}
// These methods are the only business logic which was being used through the code.
// It must be evaluated if these methods should be kept
@Deprecated
public boolean isExternalDegreeChange() {
return getIsExternalDegreeChange();
}
@Deprecated
public boolean isInternalDegreeChange() {
return getIsInternalDegreeChange();
}
@Deprecated
public boolean isTransfer() {
return getIsTransfer();
}
@Deprecated
public boolean isMiddleAndSuperiorCourses() {
return getIsMiddleAndSuperiorCourses();
}
@Deprecated
public boolean isOver23() {
return getIsOver23();
}
@Deprecated
public boolean isInternal2ndCycleAccess() {
return getIsInternal2ndCycleAccess();
}
@Deprecated
public boolean isIsolatedCurricularUnits() {
return getIsIsolatedCurricularUnits();
}
@Deprecated
public boolean isInternal3rdCycleAccess() {
return getIsInternal3rdCycleAccess();
}
@Deprecated
public boolean isDirectAccessFrom1stCycle() {
return getIsDirectAccessFrom1stCycle();
}
@Deprecated
public boolean isHandicappedContingent() {
return getIsHandicappedContingent();
}
@Deprecated
public boolean isFirstCycleAttribution() {
return getIsFirstCycleAttribution();
}
@Deprecated
public boolean isReIngression() {
return getIsReIngression();
}
//The booleans which map to some of the Enum values must be protected to avoid having more than one IngressionType instance with the same boolean as true
@Override
@Deprecated
protected void setIsExternalDegreeChange(boolean isExternalDegreeChange) {
if (isExternalDegreeChange) {
checkUniqueWithPredicate(IngressionType::isExternalDegreeChange);
}
super.setIsExternalDegreeChange(isExternalDegreeChange);
}
@Override
@Deprecated
protected void setIsInternalDegreeChange(boolean isInternalDegreeChange) {
if (isInternalDegreeChange) {
checkUniqueWithPredicate(IngressionType::isInternalDegreeChange);
}
super.setIsInternalDegreeChange(isInternalDegreeChange);
}
@Override
@Deprecated
protected void setIsTransfer(boolean isTransfer) {
if (isTransfer) {
checkUniqueWithPredicate(IngressionType::isTransfer);
}
super.setIsTransfer(isTransfer);
}
@Override
@Deprecated
protected void setIsMiddleAndSuperiorCourses(boolean isMiddleAndSuperiorCourses) {
if (isMiddleAndSuperiorCourses) {
checkUniqueWithPredicate(IngressionType::isMiddleAndSuperiorCourses);
}
super.setIsMiddleAndSuperiorCourses(isMiddleAndSuperiorCourses);
}
@Override
@Deprecated
protected void setIsOver23(boolean isOver23) {
if (isOver23) {
checkUniqueWithPredicate(IngressionType::isOver23);
}
super.setIsOver23(isOver23);
}
@Override
@Deprecated
protected void setIsInternal2ndCycleAccess(boolean isInternal2ndCycleAccess) {
if (isInternal2ndCycleAccess) {
checkUniqueWithPredicate(IngressionType::isInternal2ndCycleAccess);
}
super.setIsInternal2ndCycleAccess(isInternal2ndCycleAccess);
}
@Override
public void setIsIsolatedCurricularUnits(boolean isIsolatedCurricularUnits) {
if (isIsolatedCurricularUnits) {
checkUniqueWithPredicate(IngressionType::isIsolatedCurricularUnits);
}
super.setIsIsolatedCurricularUnits(isIsolatedCurricularUnits);
}
@Override
@Deprecated
protected void setIsInternal3rdCycleAccess(boolean isInternal3rdCycleAccess) {
if (isInternal3rdCycleAccess) {
checkUniqueWithPredicate(IngressionType::isInternal3rdCycleAccess);
}
super.setIsInternal3rdCycleAccess(isInternal3rdCycleAccess);
}
@Override
@Deprecated
protected void setIsDirectAccessFrom1stCycle(boolean isDirectAccessFrom1stCycle) {
if (isDirectAccessFrom1stCycle) {
checkUniqueWithPredicate(IngressionType::isDirectAccessFrom1stCycle);
}
super.setIsDirectAccessFrom1stCycle(isDirectAccessFrom1stCycle);
}
@Override
@Deprecated
protected void setIsHandicappedContingent(boolean isHandicappedContingent) {
if (isHandicappedContingent) {
checkUniqueWithPredicate(IngressionType::isHandicappedContingent);
}
super.setIsHandicappedContingent(isHandicappedContingent);
}
@Override
@Deprecated
protected void setIsFirstCycleAttribution(boolean isFirstCycleAttribution) {
if (isFirstCycleAttribution) {
checkUniqueWithPredicate(IngressionType::isFirstCycleAttribution);
}
super.setIsFirstCycleAttribution(isFirstCycleAttribution);
}
@Override
@Deprecated
protected void setIsReIngression(boolean isReIngression) {
if (isReIngression) {
checkUniqueWithPredicate(IngressionType::isReIngression);
}
super.setIsReIngression(isReIngression);
}
public void delete() {
if (!getRegistrationSet().isEmpty()) {
throw new DomainException("label.error.ingressionType.delete.hasRegistrationsAssociated");
}
if (!getStudentCandidacySet().isEmpty()) {
throw new DomainException("label.error.ingressionType.delete.hasStudentCandidaciesAssociated");
}
setRootDomainObject(null);
deleteDomainObject();
}
public void editState(boolean hasEntryPhase, boolean isDirectAccessFrom1stCycle, boolean isExternalDegreeChange,
boolean isFirstCycleAttribution, boolean isHandicappedContingent, boolean isInternal2ndCycleAccess,
boolean isInternal3rdCycleAccess, boolean isInternalDegreeChange, boolean isIsolatedCurricularUnits,
boolean isMiddleAndSuperiorCourses, boolean isOver23, boolean isReIngression, boolean isTransfer) {
setHasEntryPhase(hasEntryPhase);
setIsDirectAccessFrom1stCycle(isDirectAccessFrom1stCycle);
setIsExternalDegreeChange(isExternalDegreeChange);
setIsFirstCycleAttribution(isFirstCycleAttribution);
setIsHandicappedContingent(isHandicappedContingent);
setIsInternal2ndCycleAccess(isInternal2ndCycleAccess);
setIsInternal3rdCycleAccess(isInternal3rdCycleAccess);
setIsInternalDegreeChange(isInternalDegreeChange);
setIsIsolatedCurricularUnits(isIsolatedCurricularUnits);
setIsMiddleAndSuperiorCourses(isMiddleAndSuperiorCourses);
setIsOver23(isOver23);
setIsReIngression(isReIngression);
setIsTransfer(isTransfer);
}
}