package de.fred4jupiter.fredbet.web.ranking; import de.fred4jupiter.fredbet.domain.RankingSelection; import de.fred4jupiter.fredbet.repository.UsernamePoints; import de.fred4jupiter.fredbet.service.ranking.RankingService; import de.fred4jupiter.fredbet.util.Validator; import de.fred4jupiter.fredbet.web.WebMessageUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; @Controller @RequestMapping("/ranking") public class RankingController { private static final String CONTENT_TYPE_PDF = "application/pdf"; private static final String PAGE_RANKING = "ranking/list"; @Autowired private RankingService rankingService; @Autowired private WebMessageUtil messageUtil; @GetMapping public String list(Model model) { return queryRanking(model, RankingSelection.MIXED); } @GetMapping("/{mode}") public String list(Model model, @PathVariable("mode") String mode) { return queryRanking(model, RankingSelection.fromMode(mode)); } @GetMapping(value = "/pdf", produces = CONTENT_TYPE_PDF) public ResponseEntity<byte[]> exportAllBets() { final String fileName = createFilename(); byte[] fileContent = this.rankingService.exportBetsToPdf(LocaleContextHolder.getLocale()); if (fileContent == null) { return ResponseEntity.notFound().build(); } return createResponseEntity(fileName, fileContent); } private String createFilename() { return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMyy_HHmmSS")) + "_FredBet-Ranking.pdf"; } private ResponseEntity<byte[]> createResponseEntity(final String fileName, byte[] fileContent) { return ResponseEntity.ok().header("Content-Type", CONTENT_TYPE_PDF) .header("Content-Disposition", "inline; filename=\"" + fileName + "\"").body(fileContent); } private String queryRanking(Model model, RankingSelection rankingSelection) { List<UsernamePoints> rankings = rankingService.calculateCurrentRanking(rankingSelection); if (Validator.isEmpty(rankings) && RankingSelection.MIXED.equals(rankingSelection)) { messageUtil.addInfoMsg(model, "ranking.noRankings"); model.addAttribute("rankings", rankings); return PAGE_RANKING; } for (int i = 0; i < rankings.size(); i++) { UsernamePoints usernamePoints = rankings.get(i); if (i == 0) { usernamePoints.setCssRankClass("label-success"); } else if (i == 1) { usernamePoints.setCssRankClass("label-primary"); } else if (i == 2) { usernamePoints.setCssRankClass("label-warning"); } else if (i == 3) { usernamePoints.setCssRankClass("label-rank4"); } else if (i == 4) { usernamePoints.setCssRankClass("label-rank5"); } else if (i == 5) { usernamePoints.setCssRankClass("label-rank6"); } else { usernamePoints.setCssRankClass("label-default"); } } model.addAttribute("rankings", rankings); return PAGE_RANKING; } }