/** * 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.report.candidacy.erasmus; import java.util.Locale; import java.util.TreeSet; import org.fenixedu.academic.domain.CurricularCourse; import org.fenixedu.academic.domain.candidacyProcess.erasmus.ErasmusApplyForSemesterType; import org.fenixedu.academic.domain.candidacyProcess.mobility.MobilityApplicationProcess; import org.fenixedu.academic.domain.candidacyProcess.mobility.MobilityIndividualApplicationProcess; import org.fenixedu.academic.domain.degreeStructure.Context; import org.fenixedu.academic.report.FenixReport; import org.fenixedu.academic.util.FenixStringTools; import org.fenixedu.academic.util.MultiLanguageString; import org.jsoup.helper.StringUtil; public class LearningAgreementDocument extends FenixReport { MobilityIndividualApplicationProcess process; static final protected char END_CHAR = ' '; static final protected int LINE_LENGTH = 70; static final protected String LINE_BREAK = "\n"; static final protected String YEAR_TEXT = "Y."; static final protected String SEMESTER_TEXT = "Sem."; public LearningAgreementDocument(MobilityIndividualApplicationProcess process) { this.process = process; fillReport(); } public LearningAgreementDocument(MobilityIndividualApplicationProcess process, Locale locale) { super(locale); this.process = process; fillReport(); } @Override protected void fillReport() { addParameter("mobilityProgram", process.getMobilityProgram().getName().getContent(MultiLanguageString.en)); addParameter("academicYear", process.getCandidacyExecutionInterval().getName()); addParameter("studentName", process.getPersonalDetails().getName()); addParameter("sendingInstitution", process.getCandidacy().getMobilityStudentData().getSelectedOpening() .getMobilityAgreement().getUniversityUnit().getNameI18n().getContent()); addParameter("desiredEnrollments", getChosenSubjectsInformation()); } private String getChosenSubjectsInformation() { StringBuilder result = new StringBuilder(); for (CurricularCourse course : process.getCandidacy().getCurricularCoursesSet()) { String yearAndSemester = buildYearAndSemester(course); result.append( FenixStringTools.multipleLineRightPadWithSuffix(course.getNameI18N().getContent(MultiLanguageString.en) + " (" + course.getDegree().getSigla() + ")" + yearAndSemester, LINE_LENGTH, END_CHAR, course .getEctsCredits().toString())).append(LINE_BREAK); } return result.toString(); } private String buildYearAndSemester(CurricularCourse course) { String year = ""; String semester = ""; if (course.getParentContextsSet().size() > 1 && ((MobilityApplicationProcess) process.getCandidacyProcess()).getForSemester().equals( ErasmusApplyForSemesterType.SECOND_SEMESTER)) { TreeSet<Integer> years = new TreeSet<Integer>(); for (Context context : course.getParentContextsSet()) { years.add(context.getCurricularYear()); } if (years.size() == 1) { year = YEAR_TEXT + years.iterator().next(); } semester = SEMESTER_TEXT + "2"; } else if (course.getParentContextsSet().size() == 1) { Context context = course.getParentContextsSet().iterator().next(); year = YEAR_TEXT + context.getCurricularYear(); semester = SEMESTER_TEXT + (context.containsSemester(1) ? "1" : "2"); } else { TreeSet<Integer> years = new TreeSet<Integer>(); TreeSet<Integer> semesters = new TreeSet<Integer>(); for (Context context : course.getParentContextsSet()) { years.add(context.getCurricularYear()); semesters.add(context.containsSemester(1) ? 1 : 2); } if (years.size() == 1) { year = YEAR_TEXT + years.iterator().next(); } if (semesters.size() == 1) { semester = SEMESTER_TEXT + semesters.iterator().next(); } } String yearAndSemester = year + (StringUtil.isBlank(semester) || StringUtil.isBlank(year) ? "" : " - ") + semester; yearAndSemester = (StringUtil.isBlank(yearAndSemester) ? "" : " - ") + yearAndSemester; return yearAndSemester; } @Override public String getReportFileName() { return "learning_agreement_" + process.getCandidacy().getPersonalDetails().getDocumentIdNumber(); } }