package eu.dnetlib.validatorapi.controllers; import eu.dnetlib.validatorapi.entities.SummaryResult; import eu.dnetlib.validatorapi.entities.ValidationIssue; import eu.dnetlib.validatorapi.entities.ValidationJob; import eu.dnetlib.validatorapi.repositories.ValidationIssueRepository; import eu.dnetlib.validatorapi.repositories.ValidationJobRepository; import eu.dnetlib.validatorapi.repositories.ValidationResultRepository; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import java.util.*; @RestController @CrossOrigin(origins = "*") @RequestMapping("/reports") public class ReportController { private final ValidationJobRepository validationJobRepository; private final ValidationResultRepository validationResultRepository; private final ValidationIssueRepository validationIssueRepository; public ReportController(ValidationJobRepository validationJobRepository, ValidationResultRepository validationResultRepository, ValidationIssueRepository validationIssueRepository) { this.validationJobRepository = validationJobRepository; this.validationResultRepository = validationResultRepository; this.validationIssueRepository = validationIssueRepository; } @RequestMapping(value={"getJobResult"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public ValidationJob getJobResults(@RequestParam(name = "jobId") int jobId){ Optional validationJob = validationJobRepository.findById(jobId); return (ValidationJob) validationJob.orElse(null); } @RequestMapping(value = {"getResultsByJobId"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public List getSummaryJobResults(@RequestParam(name = "jobId") int jobId){ return validationResultRepository.getSummaryResult(jobId); } @RequestMapping(value = {"getErrorsReport"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public Map> getErrors(@RequestParam(name = "jobId") int jobId, @RequestParam(name = "ruleName") String ruleName){ List resultList = validationIssueRepository.getAllErrorsRecordUrlsByRuleName(jobId, ruleName); return extractRecordsGroupedByRule(resultList); } @RequestMapping(value = {"getWarningsReport"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public Map> getWarningsReport(@RequestParam(name = "jobId") int jobId, @RequestParam(name = "ruleName") String ruleName){ List resultList = validationIssueRepository.getAllWarningsRecordUrlsByRuleName(jobId, ruleName); return extractRecordsGroupedByRule(resultList); } @RequestMapping(value = {"getRecordsByRule"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public List getRecordsByRule(@RequestParam(name = "jobId") int jobId, @RequestParam(name = "ruleName") String ruleName){ return validationIssueRepository.getErrors(jobId, ruleName); } private Map> extractRecordsGroupedByRule(List resultList) { Map> recordUrlsByIssueText = new HashMap<>(); for (Object[] result : resultList) { String issueText = (String) result[0]; String recordUrl = (String) result[1]; List recordUrls = recordUrlsByIssueText.get(issueText); if (recordUrls == null) { recordUrls = new ArrayList<>(); recordUrlsByIssueText.put(issueText, recordUrls); } recordUrls.add(recordUrl); } return recordUrlsByIssueText; } }