package uk.ac.ox.zoo.seeg.abraid.mp.publicsite.web.user;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import uk.ac.ox.zoo.seeg.abraid.mp.common.service.core.ExpertService;
/**
* Controller for displaying list of publicly visible experts.
* Copyright (c) 2014 University of Oxford
*/
@Controller
public class ContributorsController {
private static final int PAGE_SIZE = 16;
private ExpertService expertService;
@Autowired
public ContributorsController(ExpertService expertService) {
this.expertService = expertService;
}
/**
* Shows the experts page.
* @param model The templating model.
* @param page The page number to display.
* @return The ftl page name.
*/
@RequestMapping(value = "/experts", method = RequestMethod.GET)
public String showExperts(ModelMap model, Integer page) {
final int pageCount = calculatePageCount(expertService.getCountOfPubliclyVisibleExperts());
if (page != null && page >= 1 && page <= pageCount) {
model.addAttribute("page", expertService.getPageOfPubliclyVisibleExperts(page, PAGE_SIZE));
model.addAttribute("pageCount", pageCount);
model.addAttribute("pageNumber", page);
return "experts";
} else {
return "redirect:/experts?page=1";
}
}
private static int calculatePageCount(final long expertCount) {
final long pageCount = (expertCount + PAGE_SIZE - 1) / PAGE_SIZE;
return (int) Math.max(pageCount, 1);
}
}