diff --git a/src/main/java/eu/dnetlib/validatorapi/controllers/ReportController.java b/src/main/java/eu/dnetlib/validatorapi/controllers/ReportController.java index 807895a..071220c 100644 --- a/src/main/java/eu/dnetlib/validatorapi/controllers/ReportController.java +++ b/src/main/java/eu/dnetlib/validatorapi/controllers/ReportController.java @@ -3,6 +3,7 @@ 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.SummaryValidationJobRepository; import eu.dnetlib.validatorapi.repositories.ValidationIssueRepository; import eu.dnetlib.validatorapi.repositories.ValidationJobRepository; import eu.dnetlib.validatorapi.repositories.ValidationResultRepository; @@ -20,13 +21,16 @@ public class ReportController { private final ValidationJobRepository validationJobRepository; private final ValidationResultRepository validationResultRepository; private final ValidationIssueRepository validationIssueRepository; + private final SummaryValidationJobRepository summaryValidationJobRepository; public ReportController(ValidationJobRepository validationJobRepository, ValidationResultRepository validationResultRepository, - ValidationIssueRepository validationIssueRepository) { + ValidationIssueRepository validationIssueRepository, + SummaryValidationJobRepository summaryValidationJobRepository) { this.validationJobRepository = validationJobRepository; this.validationResultRepository = validationResultRepository; this.validationIssueRepository = validationIssueRepository; + this.summaryValidationJobRepository = summaryValidationJobRepository; } @RequestMapping(value={"getJobResult"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @@ -44,6 +48,38 @@ public class ReportController { return validationResultRepository.getFullSummaryResult(jobId); } + @RequestMapping(value = {"saveResultsByJobId"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public void saveSummaryJobResults(@RequestParam(name = "jobId") int jobId, + @RequestParam(name= "guidelines", required = false) Optional guidelines) { + List summaryResultList; + if (guidelines.isPresent() && guidelines.get().isEmpty()) + summaryResultList = validationResultRepository.getFullSummaryResult(jobId, guidelines.get()); + else + summaryResultList = validationResultRepository.getFullSummaryResult(jobId); + + for(SummaryResult sr:summaryResultList){ + System.out.println("Saving " + sr.getRule_name() + ", " + sr.getValidationJobId()); + sr.setValidationJobId(jobId); + summaryValidationJobRepository.save(sr); + } + } + + @RequestMapping(value = {"getSummaryFromDB"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public List getSummaryFromDB(@RequestParam(name = "jobId") int jobId, + @RequestParam(name= "guidelines", required = false) Optional guidelines) { + List srlist = summaryValidationJobRepository.findByValidationJobId(jobId); + + /* SummaryResult sr = new SummaryResult(); + sr.setValidationJobId(jobId); + sr.setRule_name("Access Rights"); + System.out.println("\n>>" + summaryValidationJobRepository.findAll());*/ + /* for (SummaryResult sr:srlist) { + System.out.println(sr); + }*/ + return srlist; + + } + @RequestMapping(value = {"getWarningsReport"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) private List getWarningDescriptors(@RequestParam(name = "jobId") int jobId, @RequestParam(name = "ruleName") String ruleName){ diff --git a/src/main/java/eu/dnetlib/validatorapi/controllers/SummaryResultId.java b/src/main/java/eu/dnetlib/validatorapi/controllers/SummaryResultId.java new file mode 100644 index 0000000..b718f6c --- /dev/null +++ b/src/main/java/eu/dnetlib/validatorapi/controllers/SummaryResultId.java @@ -0,0 +1,33 @@ +package eu.dnetlib.validatorapi.controllers; + +import java.io.Serializable; + +public class SummaryResultId implements Serializable { + public String rule_name; + public int validationJobId; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + SummaryResultId that = (SummaryResultId) o; + + System.out.println("\n\n\n\n"); + System.out.println("Validation job id " + validationJobId); + System.out.println("rule_name " + rule_name); + System.out.println("\n\n\n\n"); + + + if (validationJobId != that.validationJobId) return false; + return rule_name != null ? rule_name.equals(that.rule_name) : that.rule_name == null; + } + + // Implement hashCode method + @Override + public int hashCode() { + int result = rule_name != null ? rule_name.hashCode() : 0; + result = 31 * result + validationJobId; + return result; + } +} diff --git a/src/main/java/eu/dnetlib/validatorapi/controllers/ValidationController.java b/src/main/java/eu/dnetlib/validatorapi/controllers/ValidationController.java index 9d4376d..0520f85 100644 --- a/src/main/java/eu/dnetlib/validatorapi/controllers/ValidationController.java +++ b/src/main/java/eu/dnetlib/validatorapi/controllers/ValidationController.java @@ -7,6 +7,7 @@ import eu.dnetlib.validatorapi.entities.RuleInfo; import eu.dnetlib.validatorapi.entities.ValidationJob; import eu.dnetlib.validatorapi.entities.ValidationRuleResult; import eu.dnetlib.validatorapi.exceptions.ValidationException; +import eu.dnetlib.validatorapi.repositories.SummaryValidationJobRepository; import eu.dnetlib.validatorapi.repositories.ValidationIssueRepository; import eu.dnetlib.validatorapi.repositories.ValidationJobRepository; import eu.dnetlib.validatorapi.repositories.ValidationResultRepository; @@ -55,16 +56,20 @@ public class ValidationController { private final ValidationResultRepository validationResultRepository; private final ValidationIssueRepository validationIssueRepository; + private final SummaryValidationJobRepository summaryValidationJobRepository; + @Autowired CamelContext camelContext; @Autowired public ValidationController(ValidationJobRepository validationJobRepository, ValidationResultRepository validationResultRepository, - ValidationIssueRepository validationIssueRepository) { + ValidationIssueRepository validationIssueRepository, + SummaryValidationJobRepository summaryValidationJobRepository) { this.validationJobRepository = validationJobRepository; this.validationResultRepository = validationResultRepository; this.validationIssueRepository = validationIssueRepository; + this.summaryValidationJobRepository = summaryValidationJobRepository; } @RequestMapping(value = {"/realValidator-old"}, method = RequestMethod.GET) @@ -219,7 +224,8 @@ public class ValidationController { if (fairProfile == null) { oaiPmhRouteBuilder = - new SimpleOaiPmhRoute(oaiEndpoint, profile, validationJob, numberOfRecords, uuid.toString()); + new SimpleOaiPmhRoute(oaiEndpoint, profile, validationJob, numberOfRecords, uuid.toString(), + validationResultRepository, summaryValidationJobRepository); } else { oaiPmhRouteBuilder = diff --git a/src/main/java/eu/dnetlib/validatorapi/entities/SummaryResult.java b/src/main/java/eu/dnetlib/validatorapi/entities/SummaryResult.java index e6005f2..3625662 100644 --- a/src/main/java/eu/dnetlib/validatorapi/entities/SummaryResult.java +++ b/src/main/java/eu/dnetlib/validatorapi/entities/SummaryResult.java @@ -1,58 +1,64 @@ package eu.dnetlib.validatorapi.entities; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.IdClass; +import eu.dnetlib.validatorapi.controllers.SummaryResultId; + +import javax.persistence.*; import java.io.Serializable; @Entity -@IdClass(SummaryResult.class) +@Table(name="summary_result") +@IdClass(SummaryResultId.class) public class SummaryResult implements Serializable { @Id @Column(name="rule_name") - String rule_name; + public String rule_name; @Id @Column(name="validation_job_id") - int validationJobId; + public int validationJobId; @Column(name="rule_weight") - int rule_weight; + public int rule_weight; @Column(name="requirement_level") - String requirement_level; + public String requirement_level; @Column(name="description") - String description; + public String description; @Column(name="fair_principles") - String fair_principles; + public String fair_principles; @Column(name="link") - String link; + public String link; @Column(name="guidelines") - String guidelines; + public String guidelines; @Column(name = "internal_error") - String internal_error; + public String internal_error; @Column(name="rule_status") - String rule_status; + public String rule_status; @Column(name = "passed_records") - long passed_records; + public long passed_records; @Column(name="failed_records") - long failed_records; + public long failed_records; @Column(name="has_errors") - boolean has_errors; + public boolean has_errors; @Column(name="has_warnings") - boolean has_warnings; + public boolean has_warnings; + public SummaryResult(){} + + public SummaryResult(int validationJobId, String rule_name) { + this.validationJobId = validationJobId; + this.rule_name = rule_name; + } public SummaryResult(String rule_name, long passed_records, long failed_records) { this.rule_name = rule_name; this.passed_records = passed_records; @@ -95,6 +101,14 @@ public class SummaryResult implements Serializable { this.rule_name = rule_name; } + public int getValidationJobId() { + return validationJobId; + } + + public void setValidationJobId(int validationJobId) { + this.validationJobId = validationJobId; + } + public int getRule_weight() { return rule_weight; } @@ -201,5 +215,4 @@ public class SummaryResult implements Serializable { '}'; } - } diff --git a/src/main/java/eu/dnetlib/validatorapi/processors/SummaryValidationJobProcessor.java b/src/main/java/eu/dnetlib/validatorapi/processors/SummaryValidationJobProcessor.java new file mode 100644 index 0000000..4198fa3 --- /dev/null +++ b/src/main/java/eu/dnetlib/validatorapi/processors/SummaryValidationJobProcessor.java @@ -0,0 +1,41 @@ +package eu.dnetlib.validatorapi.processors; + +import eu.dnetlib.validatorapi.entities.SummaryResult; +import eu.dnetlib.validatorapi.repositories.SummaryValidationJobRepository; +import eu.dnetlib.validatorapi.repositories.ValidationResultRepository; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; + +import java.util.List; + +public class SummaryValidationJobProcessor implements Processor { + + private final ValidationResultRepository validationResultRepository; + private final SummaryValidationJobRepository summaryValidationJobRepository; + int validation_job_id; + + public SummaryValidationJobProcessor(ValidationResultRepository validationResultRepository, + SummaryValidationJobRepository summaryValidationJobRepository, + int validation_job_id){ + this.validationResultRepository = validationResultRepository; + this.summaryValidationJobRepository = summaryValidationJobRepository; + this.validation_job_id = validation_job_id; + } + + @Override + public void process(Exchange exchange) throws Exception { + List summaryResults = validationResultRepository.getFullSummaryResult + (validation_job_id); + + + System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); + System.out.println("VALIDATION JOB ID " + (Integer) exchange.getIn().getHeader("validationId")); + System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); + + for(SummaryResult sr: summaryResults) { + sr.validationJobId = validation_job_id; + sr.validationJobId = validation_job_id; + summaryValidationJobRepository.save(sr); + } + } +} diff --git a/src/main/java/eu/dnetlib/validatorapi/repositories/SummaryValidationJobRepository.java b/src/main/java/eu/dnetlib/validatorapi/repositories/SummaryValidationJobRepository.java index bb37eda..9e0ba58 100644 --- a/src/main/java/eu/dnetlib/validatorapi/repositories/SummaryValidationJobRepository.java +++ b/src/main/java/eu/dnetlib/validatorapi/repositories/SummaryValidationJobRepository.java @@ -1,10 +1,14 @@ package eu.dnetlib.validatorapi.repositories; +import eu.dnetlib.validatorapi.controllers.SummaryResultId; import eu.dnetlib.validatorapi.entities.SummaryResult; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -@Repository -public interface SummaryValidationJobRepository extends JpaRepository { +import java.util.List; +@Repository +public interface SummaryValidationJobRepository extends JpaRepository { + + List findByValidationJobId(int validationJobId); } diff --git a/src/main/java/eu/dnetlib/validatorapi/routes/SimpleOaiPmhRoute.java b/src/main/java/eu/dnetlib/validatorapi/routes/SimpleOaiPmhRoute.java index fa37441..93b08c3 100644 --- a/src/main/java/eu/dnetlib/validatorapi/routes/SimpleOaiPmhRoute.java +++ b/src/main/java/eu/dnetlib/validatorapi/routes/SimpleOaiPmhRoute.java @@ -4,10 +4,9 @@ import eu.dnetlib.validator2.validation.guideline.openaire.AbstractOpenAireProfi import eu.dnetlib.validatorapi.entities.ValidationIssue; import eu.dnetlib.validatorapi.entities.ValidationJob; import eu.dnetlib.validatorapi.entities.ValidationRuleResult; -import eu.dnetlib.validatorapi.processors.DataBaseProcessor; -import eu.dnetlib.validatorapi.processors.ErrorProcessor; -import eu.dnetlib.validatorapi.processors.ExceptionProcessor; -import eu.dnetlib.validatorapi.processors.XmlProcessor; +import eu.dnetlib.validatorapi.processors.*; +import eu.dnetlib.validatorapi.repositories.SummaryValidationJobRepository; +import eu.dnetlib.validatorapi.repositories.ValidationResultRepository; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.TypeConversionException; @@ -27,15 +26,21 @@ public class SimpleOaiPmhRoute extends RouteBuilder { private ValidationJob validationJob; String routeid; + private ValidationResultRepository validationResultRepository; + private SummaryValidationJobRepository summaryValidationJobRepository; public SimpleOaiPmhRoute(String oaiEndpoint, AbstractOpenAireProfile profile, ValidationJob validationJob, - long maxNumberOfRecords, String routeid) { + long maxNumberOfRecords, String routeid, ValidationResultRepository validationResultRepository, + SummaryValidationJobRepository summaryValidationJobRepository) { this.oaiEndpoint = oaiEndpoint; this.validationJob = validationJob; this.profile = profile; this.maxNumberOfRecords = maxNumberOfRecords; this.routeid = routeid; + + this.validationResultRepository = validationResultRepository; + this.summaryValidationJobRepository = summaryValidationJobRepository; } @Override @@ -49,7 +54,7 @@ public class SimpleOaiPmhRoute extends RouteBuilder { onException(TypeConversionException.class) .process(new ExceptionProcessor(validationJob)) - .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true").log("\n\n\n\nHEREEEEEE") + .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true") .to("controlbus:route?routeId="+routeid+"&action=stop") .maximumRedeliveries(0) .handled(true) @@ -109,6 +114,7 @@ public class SimpleOaiPmhRoute extends RouteBuilder { .process(new DataBaseProcessor()) .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true")//;.to("direct:saveToDatabase") .to("controlbus:route?routeId="+routeid+"&action=stop&async=true") + .to("direct:cleanDB") .endChoice() .end() .endChoice() @@ -117,6 +123,10 @@ public class SimpleOaiPmhRoute extends RouteBuilder { .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true") .end(); + from("direct:cleanDB") + .process(new SummaryValidationJobProcessor(validationResultRepository, summaryValidationJobRepository, + validationJob.id)); + /* from("direct:saveToDatabase") .routeId(routeid2)