strBuffer.append("</td><td class='subheader' width='130px'>");
strBuffer.append("</td><td class='subheader' width='130'>");
    private void renderExecutionCourseListForYear(StringBuilder strBuffer, Integer curricularYear,            PageContext pageContext) {        if (!examsMap.hasExecutionCoursesForGivenCurricularYear(curricularYear)) {            strBuffer.append("<i>").append(getMessageResource(pageContext, "no.execution.courses.for.curricular.year")).append(curricularYear).append("</i>");        } else {            if (user.equals("public")) {                strBuffer.append("<table class='tab_exams_details' cellspacing='0px'>");                strBuffer.append("<tr><th rowspan='2' width='250px' class='ordYear'>");                strBuffer                        .append(getMessageResource(pageContext, "public.degree.information.label.year"));                strBuffer.append(" ");                strBuffer.append(curricularYear);                strBuffer.append("</th>");                strBuffer.append("<th colspan='3' width='250'>");                strBuffer                        .append(getMessageResource(pageContext, "public.degree.information.label.times"));                strBuffer.append(" 1");                strBuffer.append("</th>");                strBuffer.append("<th colspan='3'>");                strBuffer                        .append(getMessageResource(pageContext, "public.degree.information.label.times"));                strBuffer.append(" 2");                strBuffer.append("</th></tr>");                strBuffer.append("<tr><td class='subheader' width='70px'>");                strBuffer.append(getMessageResource(pageContext, "public.degree.information.label.day"));                strBuffer.append("</td><td class='subheader' width='50px'>");                strBuffer                        .append(getMessageResource(pageContext, "public.degree.information.label.hour"));                strBuffer.append("</td><td class='subheader' width='130px'>");                strBuffer                        .append(getMessageResource(pageContext, "public.degree.information.label.room"));                strBuffer.append("</td>");                strBuffer.append("<td class='subheader' width='70px'>");                strBuffer.append(getMessageResource(pageContext, "public.degree.information.label.day"));                strBuffer.append("</td>" + "<td class='subheader' width='50px'>");                strBuffer                        .append(getMessageResource(pageContext, "public.degree.information.label.hour"));                strBuffer.append("</td><td class='subheader' width='130px'>");                strBuffer                        .append(getMessageResource(pageContext, "public.degree.information.label.room"));                strBuffer.append("</td></tr>");            } else {                strBuffer.append("<strong>");                strBuffer.append(getMessageResource(pageContext,                        "public.degree.information.label.courseOf"));                strBuffer.append(curricularYear + "&ordm; ano:</strong>");            }            Collections.sort(examsMap.getExecutionCourses(), new BeanComparator("sigla"));            String rowClass = "notFirstRow"; // used for CSS style            for (int i = 0; i < examsMap.getExecutionCourses().size(); i++) {                InfoExecutionCourse infoExecutionCourse = (InfoExecutionCourse) examsMap                        .getExecutionCourses().get(i);                if (user.equals("sop")) {                    strBuffer.append("<table border='1' cellspacing='0' cellpadding='3' width='95%'>");                    strBuffer.append("<tr>");                }                if (i == 0) {                    rowClass = "firstRow";                }                if (infoExecutionCourse.getCurricularYear().equals(curricularYear)) {                    boolean showCreateExamLink = infoExecutionCourse.getAssociatedInfoExams().size() < 2;                    if (user.equals("sop")) {                        strBuffer.append("<td colspan='6'>");                    }                    if (user.equals("public")) {                        strBuffer.append("<tr valign='top'>");                        strBuffer.append("<td class='" + rowClass + "'>");                        strBuffer.append("<a href='viewSite.do?method=firstPage&amp;objectCode="                                + infoExecutionCourse.getIdInternal()                                + "&amp;executionPeriodOID="                                + infoExecutionCourse.getInfoExecutionPeriod().getIdInternal()                                + "&amp;degreeID="                                + examsMap.getInfoExecutionDegree().getInfoDegreeCurricularPlan()                                        .getInfoDegree().getIdInternal()                                + "&amp;"                                + SessionConstants.EXECUTION_COURSE_OID                                + "="                                + infoExecutionCourse.getIdInternal()                                + "&amp;executionDegreeID="                                + examsMap.getInfoExecutionDegree().getIdInternal()                                + "&amp;degreeCurricularPlanID="                                + examsMap.getInfoExecutionDegree().getInfoDegreeCurricularPlan()                                        .getIdInternal() + "'>");                    } else if (showCreateExamLink && user.equals("sop")) {                        strBuffer.append("<a href='showExamsManagement.do?method=createByCourse&amp;"                                + SessionConstants.EXECUTION_COURSE_OID + "="                                + infoExecutionCourse.getIdInternal() + "&amp;"                                + SessionConstants.EXECUTION_PERIOD_OID + "="                                + infoExecutionCourse.getInfoExecutionPeriod().getIdInternal() + "&amp;"                                + SessionConstants.EXECUTION_DEGREE_OID + "="                                + examsMap.getInfoExecutionDegree().getIdInternal() + "&amp;"                                + SessionConstants.CURRICULAR_YEAR_OID + "=" + curricularYear.toString()                                + "'>");                    }                    strBuffer.append(infoExecutionCourse.getSigla());                    strBuffer.append(" - ");                    strBuffer.append(infoExecutionCourse.getNome());                    if (user.equals("public")) {                        strBuffer.append("</a>");                        strBuffer.append("</td>");                    }                    boolean hasComment = infoExecutionCourse.getComment() != null                            && infoExecutionCourse.getComment().length() > 0                            && !infoExecutionCourse.getComment().equals(" ");                    if (hasComment) {                        if (user.equals("sop")) {                            strBuffer.append(" : ");                            strBuffer.append("<a href='defineComment.do?executionCourseCode=");                            strBuffer.append(infoExecutionCourse.getSigla());                            strBuffer.append("&amp;executionPeriodName="                                    + infoExecutionCourse.getInfoExecutionPeriod().getName());                            strBuffer.append("&amp;executionYear="                                    + infoExecutionCourse.getInfoExecutionPeriod()                                            .getInfoExecutionYear().getYear());                            strBuffer.append("&amp;comment=" + infoExecutionCourse.getComment());                            strBuffer.append("&amp;method=prepare");                            strBuffer.append("&amp;indexExecutionCourse=" + i);                            strBuffer.append("&amp;" + SessionConstants.EXECUTION_PERIOD_OID + "="                                    + infoExecutionCourse.getInfoExecutionPeriod().getIdInternal()                                    + "&amp;" + SessionConstants.EXECUTION_DEGREE_OID + "="                                    + examsMap.getInfoExecutionDegree().getIdInternal()                                    + getCurricularYearsArgs());                            strBuffer.append("'>");                        } else if (user.equals("public")) {                            strBuffer.append("<td colspan='6' class='" + rowClass + "'><i>");                        }                        strBuffer.append(infoExecutionCourse.getComment());                        if (user.equals("sop")) {                            strBuffer.append("</a>");                        } else if (user.equals("public")) {                            strBuffer.append("</i></td>");                        }                    } else {                        if (user.equals("sop")) {                            strBuffer.append(" : ");                            strBuffer.append("<a href='defineComment.do?executionCourseCode=");                            strBuffer.append(infoExecutionCourse.getSigla());                            strBuffer.append("&amp;executionPeriodName="                                    + infoExecutionCourse.getInfoExecutionPeriod().getName());                            strBuffer.append("&amp;executionYear="                                    + infoExecutionCourse.getInfoExecutionPeriod()                                            .getInfoExecutionYear().getYear());                            strBuffer.append("&amp;method=prepare");                            strBuffer.append("&amp;indexExecutionCourse=" + i);                            strBuffer.append("&amp;" + SessionConstants.EXECUTION_PERIOD_OID + "="                                    + infoExecutionCourse.getInfoExecutionPeriod().getIdInternal()                                    + "&amp;" + SessionConstants.EXECUTION_DEGREE_OID + "="                                    + examsMap.getInfoExecutionDegree().getIdInternal()                                    + getCurricularYearsArgs());                            strBuffer.append("'>");                            strBuffer.append("Definir coment&aacute;rio");                            strBuffer.append("</a>");                        }                    }                    if (user.equals("sop")) {                        strBuffer.append("</td>");                        strBuffer.append("</tr>");                    }                    if (infoExecutionCourse.getAssociatedInfoExams().isEmpty() && !hasComment) {                        strBuffer.append("<td colspan='6' align='center' class='" + rowClass + "'>");                        strBuffer.append("<i>").append(getMessageResource(pageContext, "no.exams.for.curricular.year")).append("</i>");                        strBuffer.append("</td>");                    } else {                        // Get 1st season exam                        InfoExam season1Exam = (InfoExam) CollectionUtils.find(infoExecutionCourse                                .getAssociatedInfoExams(), new Predicate() {                            public boolean evaluate(Object obj) {                                InfoExam infoExam = (InfoExam) obj;                                return infoExam.getSeason().equals(new Season(Season.SEASON1));                            }                        });                        // Get 2nd season exam                        InfoExam season2Exam = (InfoExam) CollectionUtils.find(infoExecutionCourse                                .getAssociatedInfoExams(), new Predicate() {                            public boolean evaluate(Object obj) {                                InfoExam infoExam = (InfoExam) obj;                                return infoExam.getSeason().equals(new Season(Season.SEASON2));                            }                        });                        if (user.equals("public")) {                            if (season1Exam == null && !hasComment) {                                strBuffer.append("<td colspan='3' class='" + rowClass + "'>&nbsp</td>");                            }                            if (season2Exam == null && !hasComment) {                                strBuffer.append("<td colspan='3' class='" + rowClass + "'>&nbsp</td>");                            }                        }                        if ((season1Exam != null)                        // && season1Exam.getAssociatedRooms() != null                                // && season1Exam.getAssociatedRooms().size() >                                // 0)                                || (season2Exam != null))                        // && season2Exam.getAssociatedRooms() != null                        // && season2Exam.getAssociatedRooms().size() > 0))                        {                            if (season1Exam != null) {                                if (user.equals("sop")) {                                    strBuffer.append("<tr>");                                    strBuffer.append("<td>");                                    strBuffer.append("<a href='showExamsManagement.do?method=edit&amp;"                                            + SessionConstants.EXECUTION_COURSE_OID                                            + "="                                            + infoExecutionCourse.getIdInternal()                                            + "&amp;"                                            + SessionConstants.EXECUTION_PERIOD_OID                                            + "="                                            + infoExecutionCourse.getInfoExecutionPeriod()                                                    .getIdInternal() + "&amp;"                                            + SessionConstants.EXECUTION_DEGREE_OID + "="                                            + examsMap.getInfoExecutionDegree().getIdInternal()                                            + "&amp;" + SessionConstants.CURRICULAR_YEAR_OID + "="                                            + curricularYear.toString() + "&amp;"                                            + SessionConstants.EXAM_OID + "="                                            + season1Exam.getIdInternal() + "'>");                                }                                if (user.equals("sop")) {                                    strBuffer.append("1&ordf; &Eacute;poca");                                    strBuffer.append("</a>");                                    strBuffer.append("</td>");                                    strBuffer.append("<td>");                                    strBuffer.append(season1Exam.getDate());                                    strBuffer.append("<br>");                                    strBuffer.append(season1Exam.getBeginningHour());                                    strBuffer.append("-");                                    strBuffer.append(season1Exam.getEndHour());                                } else if (user.equals("public")) {                                    strBuffer.append("<td class='" + rowClass + "'>");                                    strBuffer.append(season1Exam.getDate());                                    strBuffer.append("</td>");                                    strBuffer.append("<td class='" + rowClass + "'>");                                    strBuffer.append(season1Exam.getBeginningHour());                                    strBuffer.append("</td>");                                    // strBuffer.append("-");                                    // strBuffer.append(season1Exam.getEndHour());                                }                                if (user.equals("sop")) {                                    strBuffer.append("</td>");                                    strBuffer.append("<td>");                                    // Integer numAlunos =                                    // infoExecutionCourse.getNumberOfAttendingStudents();                                    Integer numAlunos = season1Exam.getEnrolledStudents();                                    strBuffer.append(numAlunos);                                    strBuffer.append(getMessageResource(pageContext,                                            "public.degree.information.label.enrolledPupils"));                                    strBuffer.append("</td>");                                    strBuffer.append("<td>");                                    strBuffer.append(getMessageResource(pageContext,                                            "public.degree.information.label.lack"));                                    // Obter o num de lugares de exame das salas                                    List roomOccupation = season1Exam.getAssociatedRoomOccupation();                                    int numLugaresSalas = 0;                                    for (int iterRO = 0; iterRO < roomOccupation.size(); iterRO++) {                                        InfoRoomOccupation infoRO = (InfoRoomOccupation) roomOccupation                                                .get(iterRO);                                        numLugaresSalas += infoRO.getInfoRoom().getCapacidadeExame()                                                .intValue();                                    }                                    int numLugaresAPreencher = numAlunos.intValue() - numLugaresSalas;                                    // if (numLugaresAPreencher < 0)                                    // numLugaresAPreencher = 0;                                    strBuffer.append(numLugaresAPreencher);                                    strBuffer.append(getMessageResource(pageContext,                                            "public.degree.information.label.places"));                                    strBuffer.append("</td>");                                    strBuffer.append("<td>");                                }                                List infoRoomOccupations = season1Exam.getAssociatedRoomOccupation();                                if (infoRoomOccupations != null && infoRoomOccupations.size() > 0) {                                    if (user.equals("sop")) {                                        strBuffer.append(getMessageResource(pageContext,                                                "public.degree.information.label.rooms"));                                        strBuffer.append("<br>");                                    } else if (user.equals("public")) {                                        strBuffer.append("<td class='" + rowClass + "'>");                                    }                                    for (int iterIRO = 0; iterIRO < infoRoomOccupations.size(); iterIRO++) {                                        InfoRoomOccupation infoRoomOccupation = (InfoRoomOccupation) infoRoomOccupations                                                .get(iterIRO);                                        strBuffer.append(infoRoomOccupation.getInfoRoom().getNome()                                                + "; ");                                    }                                } else {                                    if (user.equals("sop")) {                                        strBuffer.append("-");                                    } else if (user.equals("public")) {                                        strBuffer.append("<td class='" + rowClass + "'>");                                        strBuffer.append("<i>");                                        strBuffer.append(getMessageResource(pageContext,                                                "public.degree.information.label.noRoomsAttributed"));                                        strBuffer.append("</i>");                                    }                                }                                if (user.equals("sop")) {                                    strBuffer.append("</td>");                                    strBuffer.append("<td>");                                    strBuffer                                            .append("<a href='showExamsManagement.do?method=delete&amp;"                                                    + SessionConstants.EXECUTION_COURSE_OID                                                    + "="                                                    + infoExecutionCourse.getIdInternal()                                                    + "&amp;"                                                    + SessionConstants.EXECUTION_PERIOD_OID                                                    + "="                                                    + infoExecutionCourse.getInfoExecutionPeriod()                                                            .getIdInternal() + "&amp;"                                                    + SessionConstants.EXECUTION_DEGREE_OID + "="                                                    + examsMap.getInfoExecutionDegree().getIdInternal()                                                    + "&amp;" + SessionConstants.CURRICULAR_YEAR_OID                                                    + "=" + curricularYear.toString() + "&amp;"                                                    + SessionConstants.EXAM_OID + "="                                                    + season1Exam.getIdInternal() + "'>");                                    strBuffer.append(getMessageResource(pageContext,                                            "public.degree.information.label.delete"));                                    strBuffer.append("</a>");                                    strBuffer.append("</td>");                                }                            }                            if (season2Exam != null) {                                if (user.equals("sop")) {                                    strBuffer.append("<tr>");                                    strBuffer.append("<td>");                                    strBuffer.append("<a href='showExamsManagement.do?method=edit&amp;"                                            + SessionConstants.EXECUTION_COURSE_OID                                            + "="                                            + infoExecutionCourse.getIdInternal()                                            + "&amp;"                                            + SessionConstants.EXECUTION_PERIOD_OID                                            + "="                                            + infoExecutionCourse.getInfoExecutionPeriod()                                                    .getIdInternal() + "&amp;"                                            + SessionConstants.EXECUTION_DEGREE_OID + "="                                            + examsMap.getInfoExecutionDegree().getIdInternal()                                            + "&amp;" + SessionConstants.CURRICULAR_YEAR_OID + "="                                            + curricularYear.toString() + "&amp;"                                            + SessionConstants.EXAM_OID + "="                                            + season2Exam.getIdInternal() + "'>");                                }                                if (user.equals("sop")) {                                    strBuffer.append("2&ordf; ");                                    strBuffer.append(getMessageResource(pageContext,                                            "public.degree.information.label.times"));                                    strBuffer.append("</a>");                                    strBuffer.append("</td>");                                    strBuffer.append("<td>");                                    strBuffer.append(season2Exam.getDate());                                    strBuffer.append("<br>");                                    strBuffer.append(season2Exam.getBeginningHour());                                    strBuffer.append("-");                                    strBuffer.append(season2Exam.getEndHour());                                } else if (user.equals("public")) {                                    strBuffer.append("<td class='" + rowClass + "'>");                                    strBuffer.append(season2Exam.getDate());                                    strBuffer.append("</td>");                                    strBuffer.append("<td class='" + rowClass + "'>");                                    strBuffer.append(season2Exam.getBeginningHour());                                    strBuffer.append("</td>");                                    // strBuffer.append("-");                                    // strBuffer.append(season2Exam.getEndHour());                                }                                if (user.equals("sop")) {                                    strBuffer.append("</td>");                                    strBuffer.append("<td>");                                    // Integer numAlunos =                                    // infoExecutionCourse.getNumberOfAttendingStudents();                                    Integer numAlunos = season2Exam.getEnrolledStudents();                                    strBuffer.append(numAlunos);                                    strBuffer.append(getMessageResource(pageContext,                                            "public.degree.information.label.enrolledPupils"));                                    strBuffer.append("</td>");                                    strBuffer.append("<td>");                                    strBuffer.append(getMessageResource(pageContext,                                            "public.degree.information.label.lack"));                                    // Obter o num de lugares de exame das salas                                    List roomOccupation = season2Exam.getAssociatedRoomOccupation();                                    int numLugaresSalas = 0;                                    for (int iterRO = 0; iterRO < roomOccupation.size(); iterRO++) {                                        InfoRoomOccupation infoRO = (InfoRoomOccupation) roomOccupation                                                .get(iterRO);                                        numLugaresSalas += infoRO.getInfoRoom().getCapacidadeExame()                                                .intValue();                                    }                                    int numLugaresAPreencher = numAlunos.intValue() - numLugaresSalas;                                    // if (numLugaresAPreencher < 0)                                    // numLugaresAPreencher = 0;                                    strBuffer.append(numLugaresAPreencher);                                    strBuffer.append(getMessageResource(pageContext,                                            "public.degree.information.label.places"));                                    strBuffer.append("</td>");                                    strBuffer.append("<td>");                                }                                List infoRoomOccupations = season2Exam.getAssociatedRoomOccupation();                                if (infoRoomOccupations != null && infoRoomOccupations.size() > 0) {                                    if (user.equals("sop")) {                                        strBuffer.append(getMessageResource(pageContext,                                                "public.degree.information.label.rooms")                                                + ":");                                        strBuffer.append("<br>");                                    } else if (user.equals("public")) {                                        strBuffer.append("<td class='" + rowClass + "'>");                                    }                                    for (int iterIRO = 0; iterIRO < infoRoomOccupations.size(); iterIRO++) {                                        InfoRoomOccupation infoRoomOccupation = (InfoRoomOccupation) infoRoomOccupations                                                .get(iterIRO);                                        strBuffer.append(infoRoomOccupation.getInfoRoom().getNome()                                                + "; ");                                    }                                    if (user.equals("public")) {                                        strBuffer.append("</td>");                                    }                                } else {                                    if (user.equals("sop")) {                                        strBuffer.append("-");                                    } else if (user.equals("public")) {                                        strBuffer.append("<td class='" + rowClass + "'>");                                        strBuffer.append("<i>");                                        strBuffer.append(getMessageResource(pageContext,                                                "public.degree.information.label.noRoomsAttributed"));                                        strBuffer.append("</i>");                                        strBuffer.append("</td>");                                    }                                }                                if (user.equals("sop")) {                                    strBuffer.append("</td>");                                    strBuffer.append("<td>");                                    strBuffer                                            .append("<a href='showExamsManagement.do?method=delete&amp;"                                                    + SessionConstants.EXECUTION_COURSE_OID                                                    + "="                                                    + infoExecutionCourse.getIdInternal()                                                    + "&amp;"                                                    + SessionConstants.EXECUTION_PERIOD_OID                                                    + "="                                                    + infoExecutionCourse.getInfoExecutionPeriod()                                                            .getIdInternal() + "&amp;"                                                    + SessionConstants.EXECUTION_DEGREE_OID + "="                                                    + examsMap.getInfoExecutionDegree().getIdInternal()                                                    + "&amp;" + SessionConstants.CURRICULAR_YEAR_OID                                                    + "=" + curricularYear.toString() + "&amp;"                                                    + SessionConstants.EXAM_OID + "="                                                    + season2Exam.getIdInternal() + "'>");                                    strBuffer.append(getMessageResource(pageContext,                                            "public.degree.information.label.delete"));                                    strBuffer.append("</a>");                                    strBuffer.append("</td>");                                }                            }                        }                    }                    if (user.equals("public")) {                        strBuffer.append("</tr>");                        if (rowClass == "firstRow") {                            rowClass = "notFirstRow";                        }                    }                }                if (user.equals("sop")) {                    strBuffer.append("</tr>");                    strBuffer.append("</table>");                    strBuffer.append("<br />");                }            }            if (user.equals("public")) {                strBuffer.append("</table>");            }        }    }