package eu.dnetlib.validatorapi.controllers; import eu.dnetlib.validatorapi.entities.IssueDescriptor; import eu.dnetlib.validatorapi.entities.SummaryResult; 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.ArrayList; import java.util.List; import java.util.Optional; @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, @RequestParam(name= "guidelines", required = false) Optional guidelines) { if (guidelines.isPresent() && guidelines.get().isEmpty()) return validationResultRepository.getFullSummaryResult(jobId, guidelines.get()); return validationResultRepository.getFullSummaryResult(jobId); } @RequestMapping(value = {"getWarningsReport"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) private List getWarningDescriptors(@RequestParam(name = "jobId") int jobId, @RequestParam(name = "ruleName") String ruleName){ List resultList = validationIssueRepository.getAllWarningsRecordUrlsByRuleName(jobId, ruleName); return extractIssueDescriptor(resultList); } @RequestMapping(value = {"getErrorsReport"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) private List getErrorDescriptors(@RequestParam(name = "jobId") int jobId, @RequestParam(name = "ruleName") String ruleName){ List resultList = validationIssueRepository.getAllErrorsRecordUrlsByRuleName(jobId, ruleName); return extractIssueDescriptor(resultList); } private List extractIssueDescriptor(List resultList) { List issueDescriptors = new ArrayList<>(); for (Object[] result : resultList) { String issueText = (String) result[0]; String recordUrl = (String) result[1]; IssueDescriptor issueDescriptor = null; for (IssueDescriptor descriptor : issueDescriptors) { if (descriptor.getDescription().equals(issueText)) { issueDescriptor = descriptor; break; } } if (issueDescriptor == null) { issueDescriptor = new IssueDescriptor(); issueDescriptor.setDescription(issueText); issueDescriptors.add(issueDescriptor); } issueDescriptor.getRecords().add(recordUrl); } return issueDescriptors; } /* @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); } 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; } */ }