/** * 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.dto; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.Predicate; import org.apache.struts.util.LabelValueBean; import org.apache.struts.util.MessageResources; import org.fenixedu.academic.domain.Coordinator; import org.fenixedu.academic.domain.Degree; import org.fenixedu.academic.domain.ExecutionDegree; import org.fenixedu.academic.domain.ExecutionSemester; public class InfoExecutionDegree extends InfoObject { public static final Comparator<InfoExecutionDegree> COMPARATOR_BY_DEGREE_TYPE_AND_NAME = new Comparator<InfoExecutionDegree>() { @Override public int compare(InfoExecutionDegree o1, InfoExecutionDegree o2) { final Degree degree1 = o1.getExecutionDegree().getDegree(); final Degree degree2 = o2.getExecutionDegree().getDegree(); final int c = degree1.getDegreeType().compareTo(degree2.getDegreeType()); return c == 0 ? degree1.getNome().compareTo(degree2.getName()) : c; } }; private final ExecutionDegree executionDegreeDomainReference; private String qualifiedName; private boolean getNextExecutionYear = false; public InfoExecutionDegree(final ExecutionDegree executionDegree) { executionDegreeDomainReference = executionDegree; } public ExecutionDegree getExecutionDegree() { return executionDegreeDomainReference; } public InfoExecutionYear getInfoExecutionYear() { return InfoExecutionYear.newInfoFromDomain(getNextExecutionYear ? getExecutionDegree().getExecutionYear() .getNextExecutionYear() : getExecutionDegree().getExecutionYear()); } public InfoDegreeCurricularPlan getInfoDegreeCurricularPlan() { return InfoDegreeCurricularPlan.newInfoFromDomain(getExecutionDegree().getDegreeCurricularPlan()); } public boolean isPublishedExam(ExecutionSemester executionSemester) { return getExecutionDegree().getPublishedExamMapsSet().contains(executionSemester); } public InfoCampus getInfoCampus() { return InfoCampus.newInfoFromDomain(getExecutionDegree().getCampus()); } public List<InfoCoordinator> getCoordinatorsList() { final List<InfoCoordinator> infoCoordinators = new ArrayList<InfoCoordinator>(); for (final Coordinator coordinator : getExecutionDegree().getCoordinatorsListSet()) { infoCoordinators.add(InfoCoordinator.newInfoFromDomain(coordinator)); } return infoCoordinators; } public InfoPeriod getInfoPeriodExamsFirstSemester() { return InfoPeriod.newInfoFromDomain(getExecutionDegree().getPeriodExamsFirstSemester()); } public InfoPeriod getInfoPeriodExamsSecondSemester() { return InfoPeriod.newInfoFromDomain(getExecutionDegree().getPeriodExamsSecondSemester()); } public InfoPeriod getInfoPeriodLessonsFirstSemester() { return InfoPeriod.newInfoFromDomain(getExecutionDegree().getPeriodLessonsFirstSemester()); } public InfoPeriod getInfoPeriodLessonsSecondSemester() { return InfoPeriod.newInfoFromDomain(getExecutionDegree().getPeriodLessonsSecondSemester()); } public String getQualifiedName() { return qualifiedName; } public void setQualifiedName(String qualifiedName) { this.qualifiedName = qualifiedName; } @Override public boolean equals(Object obj) { return obj != null && getExecutionDegree() == ((InfoExecutionDegree) obj).getExecutionDegree(); } @Override public String toString() { return getExecutionDegree().toString(); } public static List buildLabelValueBeansForList(List executionDegrees, MessageResources messageResources) { List copyExecutionDegrees = new ArrayList(); copyExecutionDegrees.addAll(executionDegrees); List result = new ArrayList(); Iterator iter = executionDegrees.iterator(); while (iter.hasNext()) { final InfoExecutionDegree infoExecutionDegree = (InfoExecutionDegree) iter.next(); List equalDegrees = (List) CollectionUtils.select(copyExecutionDegrees, new Predicate() { @Override public boolean evaluate(Object arg0) { InfoExecutionDegree infoExecutionDegreeElem = (InfoExecutionDegree) arg0; if (infoExecutionDegree.getInfoDegreeCurricularPlan().getInfoDegree().getSigla() .equals(infoExecutionDegreeElem.getInfoDegreeCurricularPlan().getInfoDegree().getSigla())) { return true; } return false; } }); if (equalDegrees.size() == 1) { copyExecutionDegrees.remove(infoExecutionDegree); String degreeType = null; if (messageResources != null) { degreeType = messageResources.getMessage(infoExecutionDegree.getInfoDegreeCurricularPlan().getInfoDegree() .getDegreeType().toString()); } if (degreeType == null) { degreeType = infoExecutionDegree.getInfoDegreeCurricularPlan().getInfoDegree().getDegreeType().toString(); } result.add(new LabelValueBean(degreeType + " " + infoExecutionDegree.getInfoDegreeCurricularPlan().getInfoDegree().getNome(), infoExecutionDegree .getExternalId().toString())); } else { String degreeType = null; if (messageResources != null) { degreeType = messageResources.getMessage(infoExecutionDegree.getInfoDegreeCurricularPlan().getInfoDegree() .getDegreeType().toString()); } if (degreeType == null) { degreeType = infoExecutionDegree.getInfoDegreeCurricularPlan().getInfoDegree().getDegreeType().toString(); } result.add(new LabelValueBean(degreeType + " " + infoExecutionDegree.getInfoDegreeCurricularPlan().getInfoDegree().getNome() + " - " + infoExecutionDegree.getInfoDegreeCurricularPlan().getName(), infoExecutionDegree.getExternalId() .toString())); } } return result; } public static InfoExecutionDegree newInfoFromDomain(ExecutionDegree executionDegree) { return executionDegree == null ? null : new InfoExecutionDegree(executionDegree); } @Override public String getExternalId() { return getExecutionDegree().getExternalId(); } @Override public void setExternalId(String integer) { throw new Error("Method should not be called!"); } public void setGetNextExecutionYear(boolean getNextExecutionYear) { this.getNextExecutionYear = getNextExecutionYear; } public boolean isBolonhaDegree() { return getExecutionDegree().isBolonhaDegree(); } }