uoa-validator-api/src/main/java/eu/dnetlib/validatorapi/controllers/ReportController.java

120 lines
5.7 KiB
Java

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> validationJob = validationJobRepository.findById(jobId);
return (ValidationJob) validationJob.orElse(null);
}
@RequestMapping(value = {"getResultsByJobId"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public List<SummaryResult> getSummaryJobResults(@RequestParam(name = "jobId") int jobId,
@RequestParam(name= "guidelines", required = false) Optional<String> 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<IssueDescriptor> getWarningDescriptors(@RequestParam(name = "jobId") int jobId,
@RequestParam(name = "ruleName") String ruleName){
List<Object[]> resultList = validationIssueRepository.getAllWarningsRecordUrlsByRuleName(jobId, ruleName);
return extractIssueDescriptor(resultList);
}
@RequestMapping(value = {"getErrorsReport"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
private List<IssueDescriptor> getErrorDescriptors(@RequestParam(name = "jobId") int jobId,
@RequestParam(name = "ruleName") String ruleName){
List<Object[]> resultList = validationIssueRepository.getAllErrorsRecordUrlsByRuleName(jobId, ruleName);
return extractIssueDescriptor(resultList);
}
private List<IssueDescriptor> extractIssueDescriptor(List<Object[]> resultList) {
List<IssueDescriptor> 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<String, List<String>> getErrors(@RequestParam(name = "jobId") int jobId, @RequestParam(name = "ruleName") String ruleName){
List<Object[]> resultList = validationIssueRepository.getAllErrorsRecordUrlsByRuleName(jobId, ruleName);
return extractRecordsGroupedByRule(resultList);
}
@RequestMapping(value = {"getWarningsReport"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public Map<String, List<String>> getWarningsReport(@RequestParam(name = "jobId") int jobId, @RequestParam(name = "ruleName") String ruleName){
List<Object[]> resultList = validationIssueRepository.getAllWarningsRecordUrlsByRuleName(jobId, ruleName);
return extractRecordsGroupedByRule(resultList);
}
private Map<String, List<String>> extractRecordsGroupedByRule(List<Object[]> resultList) {
Map<String, List<String>> recordUrlsByIssueText = new HashMap<>();
for (Object[] result : resultList) {
String issueText = (String) result[0];
String recordUrl = (String) result[1];
List<String> recordUrls = recordUrlsByIssueText.get(issueText);
if (recordUrls == null) {
recordUrls = new ArrayList<>();
recordUrlsByIssueText.put(issueText, recordUrls);
}
recordUrls.add(recordUrl);
}
return recordUrlsByIssueText;
}
*/
}