StatusController { @GetMapping({"/status", "/submissions"}) @SuppressWarnings("AssignmentToMethodParameter") public String status(HttpServletRequest request, @RequestParam(value = "problem_id", defaultValue = "") String pid, @RequestParam(value = "contest_id", required = false) @Nullable Long contestId, @RequestParam(value = "language", defaultValue = "-1") int language, @RequestParam(value = "size", defaultValue = "20") int size, @RequestParam(value = "bottom", required = false) final Long bottom, @RequestParam(value = "score", required = false) @Nullable Integer sc, @RequestParam(value = "user_id", defaultValue = "") String userId, @RequestParam(value = "top", required = false) final Long top, @Nullable Authentication authentication, Model model) { long problemId = 0; Map<Long, long[]> problemsMap = Collections.emptyMap(); if (contestId != null) { problemsMap = contestService.getProblemsMap(contestId); } try { problemId = Long.parseLong(pid); } catch (NumberFormatException ex) { if (contestId != null && pid.length() == 1) { int x = Character.toUpperCase(pid.charAt(0)) - 'A'; for (Map.Entry<Long, long[]> entry : problemsMap.entrySet()) { long key = entry.getKey(); long[] value = entry.getValue(); if (x == value[0]) { problemId = key; break; } } } } SubmissionQueryForm form = SubmissionQueryForm.builder() .problem(problemId == 0 ? null : problemId) .contest(contestId) .score(sc) .size(Math.max(Math.min(size, 500), 0)) .top(top) .bottom(bottom) .user(StringUtils.hasText(userId) ? userId : null) .language(language != -1 ? language : null) .build(); log.debug("{}", form); List<Submission> submissions = submissionMapper.findAllByCriteria(form); OptionalLong min = submissions.stream() .mapToLong(Submission::getId) .min(); OptionalLong max = submissions.stream() .mapToLong(Submission::getId) .max(); model.addAttribute("contestId", contestId); model.addAttribute("title", "Problem Status List"); StringBuilder sb = new StringBuilder( "<p align=center><font size=4 color=#339>Problem Status List</font></p>" + "<form method=get action='status'/><label for='pid'>Problem ID:</label><input id='pid' type=text name=problem_id size=8 value=\"") .append(HtmlEscape.escapeHtml4Xml(pid)).append("\"/> <label for='uid'>User ID:</label><input id='uid' type=text name=user_id size=15 value=\"") .append(HtmlEscape.escapeHtml4Xml(userId)).append("\"/>" + " <label for='languag'>Language:</label>" + "<select id='languag' size=\"1\" name=\"language\">" + "<option value=\"\">All</option>"); for (Map.Entry<Integer, Language> entry : languageService.getAvailableLanguages().entrySet()) { int key = entry.getKey(); Language value = entry.getValue(); sb.append("<option value=\"").append(key).append("\"").append(key == language ? " selected" : "").append(">").append(HtmlEscape.escapeHtml4Xml(value.getName())).append("</option>"); } sb.append("</select>"); if (contestId != null) { sb.append("<input type=hidden name=contest_id value='").append(contestId).append("' />"); } sb.append(" <button type=submit>Go</button></form>" + "<TABLE cellSpacing=0 cellPadding=0 width=100% border=1 class=table-back style=\"border-collapse: collapse\" bordercolor=#FFF>" + "<tr bgcolor=#6589D1><td align=center width=8%><b>Run ID</b></td><td align=center width=10%><b>User</b></td><td align=center width=6%><b>Problem</b></td>" + "<td align=center width=10%><b>Result</b></td><td align=center width=10%><b>Score</b></td><td align=center width=7%><b>Memory</b></td><td align=center width=7%><b>Time</b></td><td align=center width=7%><b>Language</b></td><td align=center width=7%><b>Code Length</b></td><td align=center width=17%><b>Submit Time</b></td></tr>"); boolean admin = UserDetailsServiceImpl.isAdminLoginned(request); boolean sourceBrowser = UserDetailsServiceImpl.isSourceBrowser(request); for (Submission submission : submissions) { long id = submission.getId(); String user_id1 = submission.getUser(); long problem_id1 = submission.getProblem(); Long contest_id1 = submission.getContest(); long[] num = problemsMap.getOrDefault(problem_id1, new long[]{-1}); int score = submission.getScore(); Instant inDate = submission.getInDate(); String language1 = languageService.getLanguageName(submission.getLanguage()); String color; if (score == 100) { color = "blue"; } else { color = "red"; } sb.append("<tr align=center><td>").append(id).append("</td>"); sb.append("<td><a href=userstatus?user_id=").append(user_id1) .append(">").append(user_id1).append("</a></td>"); if (contestId == null || num[0] == -1) { sb.append("<td><a href=showproblem?problem_id=") .append(problem_id1).append(">").append(problem_id1).append("</a></td>"); } else { sb.append("<td><a href=contests/") .append(contestId).append("/problems/").append(num[1]) .append(".html>").append(contestService.toProblemIndex(num[0])).append("</a></td>"); } if (score == ResultType.COMPILE_ERROR) { if (submissionService.canView(request, submission)) { sb.append("<td><a href=\"showcompileinfo?solution_id=").append(id).append("\" target=_blank><font color=green>").append(ResultType.getResultDescription(score)).append("</font></a></td>"); } else { sb.append("<td><font color=green>").append(ResultType.getResultDescription(score)).append("</font></td>"); } } else if (submissionService.canView(request, submission)) { sb.append("<td><a href=showsolutiondetails?solution_id=").append(id).append(" target=_blank><strong><font color=").append(color).append(">").append(ResultType.getResultDescription(score)).append("</font></strong></a></td>"); } else { sb.append("<td><font color=").append(color).append(">").append(ResultType.getResultDescription(score)).append("</font></a></td>"); } if (score <= 100 && score >= 0) { sb.append("<td>").append(score).append("</td>"); } else { sb.append("<td>&nbsp;</td>"); } boolean ended = true; if (!admin && contest_id1 != null) { Contest contest = contestMapper.findOne(contest_id1); if (contest != null) { ended = contest.isEnded(); } } if (score == 100 && ended) { sb.append("<td>").append(submission.getMemory()).append("K</td><td>").append(submission.getTime()).append("MS</td>"); } else { sb.append("<td>&nbsp;</td><td>&nbsp;</td>"); } if (admin || sourceBrowser || UserDetailsServiceImpl.isUser(authentication, user_id1)) { sb.append("<td><a href=showsource?solution_id=").append(id).append(" target=_blank>").append(language1).append("</a></td>"); } else { sb.append("<td>").append(language1).append("</td>"); } if (ended) { int sourceLength = submission.getSourceLength(); String t = sourceLength > 2048 ? new DecimalFormat("0.00").format(sourceLength / 1024.) + " KB" : sourceLength + " B"; sb.append("<td>").append(t).append("</td>"); } else { sb.append("<td>&nbsp;</td>"); } sb.append("<td>").append(dtf.format(inDate.atZone(ZoneId.systemDefault()).toLocalDateTime())).append("</td></tr>"); } URIBuilder uri = URIBuilder.fromRequest(request) .replaceQueryParam("top") .replaceQueryParam("bottom"); log.debug("uri={}", uri); sb.append("</table><p align=center>[<a href=\"") .append(request.getContextPath()).append(uri) .append("\">Top</a>]&nbsp;&nbsp;"); sb.append("[<a href=\"").append(request.getContextPath()); if (max.isPresent()) { uri.replaceQueryParam("bottom", Long.toString(max.getAsLong())).toString(); sb.append(uri); uri.replaceQueryParam("bottom"); } else { sb.append(uri); } sb.append("\"><font color=blue>Previous Page</font></a>]" + "&nbsp;&nbsp;[<a href=\"") .append(request.getContextPath()); if (min.isPresent()) { uri.replaceQueryParam("top", Long.toString(min.getAsLong())); } sb.append(uri).append("\"><font color=blue>Next Page</font></a>]&nbsp;&nbsp;</p>" + "<script>!function(w){setTimeout(function(){w.location.reload()},60000)}(this)</script>"); model.addAttribute("content", sb.toString()); return "legacy"; }  @GetMapping({"/status", "/submissions"}) @SuppressWarnings("AssignmentToMethodParameter") String status(HttpServletRequest request,
            @RequestParam(value = "problem_id", defaultValue = "") String pid,
            @RequestParam(value = "contest_id", required = false) @Nullable Long contestId,
            @RequestParam(value = "language", defaultValue = "-1") int language,
            @RequestParam(value = "size", defaultValue = "20") int size,
            @RequestParam(value = "bottom", required = false) final Long bottom,
            @RequestParam(value = "score", required = false) @Nullable Integer sc,
            @RequestParam(value = "user_id", defaultValue = "") String userId,
            @RequestParam(value = "top", required = false) final Long top,
            @Nullable Authentication authentication,
            Model model);  }
@Test public void testStatus() throws Exception { log.info("status"); String problemId = ""; Long contestId = null; int language = mockDataService.anyLanguage().getId(); int size = 20; Long[] bottoms = {null, 2000L}; Integer score = null; String userId = ""; Long top = null; for (int i = 0; i < 100; ++i) { mockDataService.submission(false); for (Long bottom : bottoms) { MvcResult result = mvc.perform(get("/status") .param("problem_id", problemId) .param("contest_id", Objects.toString(contestId, "")) .param("language", Integer.toString(language)) .param("size", Integer.toString(size)) .param("bottom", Objects.toString(bottom, "")) .param("score", Objects.toString(score, "")) .param("user_id", userId) .param("top", Objects.toString(top, ""))) .andExpect(status().isOk()) .andExpect(content().contentTypeCompatibleWith(MediaType.TEXT_HTML)) .andReturn(); } } }