Package sagan.team.support

Source Code of sagan.team.support.TeamController

package sagan.team.support;

import sagan.blog.Post;
import sagan.blog.support.BlogService;
import sagan.blog.support.PostView;
import sagan.support.DateFactory;
import sagan.support.nav.PageableFactory;
import sagan.team.MemberProfile;
import sagan.team.TeamLocation;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import static org.springframework.web.bind.annotation.RequestMethod.*;

/**
* Controller that handles read-only team actions, e.g. listing all team members at /team
* and showing individual team members at /team/{member}. See {@link TeamAdminController}
* for administrative operations.
*/
@Controller
@RequestMapping("/team")
class TeamController {

    private final TeamService teamService;
    private final BlogService blogService;
    private final DateFactory dateFactory;

    @Autowired
    public TeamController(TeamService teamService, BlogService blogService, DateFactory dateFactory) {
        this.teamService = teamService;
        this.blogService = blogService;
        this.dateFactory = dateFactory;
    }

    @RequestMapping(method = { GET, HEAD })
    public String showTeam(Model model) {
        List<MemberProfile> profiles = teamService.fetchActiveMembers();
        model.addAttribute("profiles", profiles);
        model.addAttribute("teamLocations", profiles.stream()
                .filter(profile -> profile.getTeamLocation() != null)
                .map(MemberProfile::getTeamLocation)
                .collect(Collectors.toList()));
        return "team/index";
    }

    @RequestMapping(value = "/{username}", method = { GET, HEAD })
    public String showProfile(@PathVariable String username, Model model) {
        MemberProfile profile = teamService.fetchMemberProfileUsername(username);
        if (profile == MemberProfile.NOT_FOUND) {
            throw new MemberNotFoundException(username);
        }
        if (profile.isHidden()) {
            throw new MemberNotFoundException("Member profile for username '%s' is hidden", username);
        }
        model.addAttribute("profile", profile);
        Page<Post> posts = blogService.getPublishedPostsForMember(profile, PageableFactory.forLists(1));
        Page<PostView> postViewPage = PostView.pageOf(posts, dateFactory);
        model.addAttribute("posts", postViewPage);

        List<TeamLocation> teamLocations = new ArrayList<>();
        if (profile.getTeamLocation() != null) {
            teamLocations.add(profile.getTeamLocation());
        }
        model.addAttribute("teamLocations", teamLocations);

        return "team/show";
    }
}
TOP

Related Classes of sagan.team.support.TeamController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.