package me.woemler.springblog.controllers; import me.woemler.springblog.models.BlogPost; import me.woemler.springblog.repositories.BlogRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import java.util.*; @Controller public class BlogController { private static Logger logger = LoggerFactory.getLogger(BlogController.class); @Autowired private BlogRepository blogRepository; @RequestMapping(value={"/", "", "/blog"}, method=RequestMethod.GET) public String home( @PageableDefault(size = 5, sort = {"postDate"}, direction = Sort.Direction.DESC) Pageable pageable, ModelMap map ) { Page<BlogPost> posts = blogRepository.findByStatusOrderByPostDateAsc(BlogPost.STATUS_ACTIVE, pageable); List<BlogPost> blogPosts = new ArrayList<>(posts.getContent()); map.addAttribute("currentPage", pageable.getPageNumber() + 1); map.addAttribute("numPages", posts.getTotalPages()); map.addAttribute("postCount", posts.getTotalElements()); map.addAttribute("blogPosts", blogPosts); return "home"; } @RequestMapping(value="/blog/{slug}") public String post(ModelMap map, @PathVariable("slug") String slug){ BlogPost post = blogRepository.findBySlug(slug); map.addAttribute("requestedPost", post); map.addAttribute("nextPost", null); map.addAttribute("previousPost", null); return "blogPost"; } @RequestMapping(value="/tags", method=RequestMethod.GET) public String listTags(ModelMap map){ List<String> tags = blogRepository.findAllTags(); List<BlogPost> posts = blogRepository.findAll(); Map<String,Integer> tagCounts = new HashMap<>(); for (BlogPost post: posts){ for (String tag: post.getTags()){ if (!tagCounts.containsKey(tag)){ tagCounts.put(tag, 0); } Integer count = tagCounts.get(tag); tagCounts.put(tag, count + 1); } } map.addAttribute("tags", tagCounts.keySet()); map.addAttribute("tagCounts", tagCounts); return "tagList"; } @RequestMapping(value="/tags/{tag}", method=RequestMethod.GET) public String tagDetails(ModelMap map, @PathVariable("tag") String tag){ List<BlogPost> blogPosts = blogRepository.findByTags(tag); map.addAttribute("tag", tag); map.addAttribute("blogPosts", blogPosts); return "tagDetails"; } //About page @RequestMapping(value="/about") public String about(ModelMap map){ return "about"; } }