pt.ist.fenix.ui.spring.ChannelsController.java Source code

Java tutorial

Introduction

Here is the source code for pt.ist.fenix.ui.spring.ChannelsController.java

Source

/**
 * Copyright  ${project.inceptionYear} Instituto Superior Tcnico
 *
 * This file is part of Fenix IST.
 *
 * Fenix IST 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.
 *
 * Fenix IST 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 Fenix IST.  If not, see <http://www.gnu.org/licenses/>.
 */
package pt.ist.fenix.ui.spring;

import java.util.Comparator;
import java.util.stream.Collectors;

import org.fenixedu.academic.domain.CurricularCourse;
import org.fenixedu.academic.domain.DegreeCurricularPlan;
import org.fenixedu.academic.domain.ExecutionCourse;
import org.fenixedu.academic.domain.ExecutionDegree;
import org.fenixedu.academic.domain.ExecutionSemester;
import org.fenixedu.bennu.core.domain.Bennu;
import org.fenixedu.bennu.core.security.Authenticate;
import org.fenixedu.bennu.spring.portal.SpringFunctionality;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.google.common.collect.ImmutableSet;

@SpringFunctionality(accessGroup = "logged", app = NewsController.class, title = "channels.title")
@RequestMapping("learning/channels")
public class ChannelsController {

    @RequestMapping
    public String bookmarks(Model model, @RequestParam(required = false) ExecutionSemester semester,
            @RequestParam(required = false) ExecutionDegree degree) {
        model.addAttribute("executions", Bennu.getInstance().getExecutionPeriodsSet().stream()
                .sorted(Comparator.reverseOrder()).collect(Collectors.toList()));
        if (semester != null) {
            model.addAttribute("selectedSemester", semester);
            model.addAttribute("degrees", semester.getExecutionYear().getExecutionDegreesSortedByDegreeName());
        }
        if (semester != null && degree != null) {
            model.addAttribute("selectedDegree", degree);
            model.addAttribute("courses",
                    semester.getAssociatedExecutionCoursesSet().stream()
                            .filter(course -> isExecutionCourseForExecutionDegree(course, degree))
                            .sorted(ExecutionCourse.EXECUTION_COURSE_NAME_COMPARATOR).collect(Collectors.toList()));
        }
        model.addAttribute("bookmarks", Authenticate.getUser().getBookmarksSet());
        model.addAttribute("slugs", ImmutableSet.of("announcement", "summary"));
        return "fenix-learning/channels";
    }

    private boolean isExecutionCourseForExecutionDegree(final ExecutionCourse executionCourse,
            final ExecutionDegree executionDegree) {
        for (final CurricularCourse curricularCourse : executionCourse.getAssociatedCurricularCoursesSet()) {
            final DegreeCurricularPlan degreeCurricularPlan = curricularCourse.getDegreeCurricularPlan();
            for (final ExecutionDegree otherExecutionDegree : degreeCurricularPlan.getExecutionDegreesSet()) {
                if (executionDegree == otherExecutionDegree) {
                    return true;
                }
            }
        }
        return false;
    }
}