diff --git a/src/main/java/eu/dnetlib/validatorapi/controllers/ReportController.java b/src/main/java/eu/dnetlib/validatorapi/controllers/ReportController.java index 071220c..3ed07a6 100644 --- a/src/main/java/eu/dnetlib/validatorapi/controllers/ReportController.java +++ b/src/main/java/eu/dnetlib/validatorapi/controllers/ReportController.java @@ -58,7 +58,7 @@ public class ReportController { summaryResultList = validationResultRepository.getFullSummaryResult(jobId); for(SummaryResult sr:summaryResultList){ - System.out.println("Saving " + sr.getRule_name() + ", " + sr.getValidationJobId()); + System.out.println("Saving " + sr.getRuleName() + ", " + sr.getValidationJobId()); sr.setValidationJobId(jobId); summaryValidationJobRepository.save(sr); } @@ -67,7 +67,7 @@ public class ReportController { @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); + List srlist = summaryValidationJobRepository.findByValidationJobIdOrderByRuleName(jobId); /* SummaryResult sr = new SummaryResult(); sr.setValidationJobId(jobId); diff --git a/src/main/java/eu/dnetlib/validatorapi/controllers/SummaryResultId.java b/src/main/java/eu/dnetlib/validatorapi/controllers/SummaryResultId.java index b718f6c..86bf7c6 100644 --- a/src/main/java/eu/dnetlib/validatorapi/controllers/SummaryResultId.java +++ b/src/main/java/eu/dnetlib/validatorapi/controllers/SummaryResultId.java @@ -3,7 +3,7 @@ package eu.dnetlib.validatorapi.controllers; import java.io.Serializable; public class SummaryResultId implements Serializable { - public String rule_name; + public String ruleName; public int validationJobId; @Override @@ -15,18 +15,18 @@ public class SummaryResultId implements Serializable { System.out.println("\n\n\n\n"); System.out.println("Validation job id " + validationJobId); - System.out.println("rule_name " + rule_name); + System.out.println("rule_name " + ruleName); 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; + return ruleName != null ? ruleName.equals(that.ruleName) : that.ruleName == null; } // Implement hashCode method @Override public int hashCode() { - int result = rule_name != null ? rule_name.hashCode() : 0; + int result = ruleName != null ? ruleName.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 d5274ac..0c07721 100644 --- a/src/main/java/eu/dnetlib/validatorapi/controllers/ValidationController.java +++ b/src/main/java/eu/dnetlib/validatorapi/controllers/ValidationController.java @@ -230,9 +230,9 @@ public class ValidationController { // new SimpleOaiPmhRoute(oaiEndpoint, profile, validationJob, numberOfRecords, uuid.toString()); } else { oaiPmhRouteBuilder = - new FairOaiPmhRoute2(oaiEndpoint, profile, validationJob, numberOfRecords, uuid.toString()); - /* new FairOaiPmhRoute2(oaiEndpoint, profile, validationJob, numberOfRecords, uuid.toString(), - validationJobRepository, validationResultRepository, summaryValidationJobRepository);*/ + // new FairOaiPmhRoute2(oaiEndpoint, profile, validationJob, numberOfRecords, uuid.toString()); + new FairOaiPmhRoute2(oaiEndpoint, profile, fairProfile, validationJob, numberOfRecords, uuid.toString(), + validationJobRepository, validationResultRepository, summaryValidationJobRepository); } @@ -432,6 +432,9 @@ public class ValidationController { return new FAIR_Data_GuidelinesProfile(); } else if (guidelinesProfileName.equals("OpenAIRE Guidelines for Literature Repositories Profile v4")) { + System.out.println("\n\n\nRETURNING FAIR LITERATURE\n\n\n"); + System.out.println("\n\n\n" + new FAIR_Literature_GuidelinesV4Profile().name() + "\n\n\n"); + return new FAIR_Literature_GuidelinesV4Profile(); } diff --git a/src/main/java/eu/dnetlib/validatorapi/entities/SummaryResult.java b/src/main/java/eu/dnetlib/validatorapi/entities/SummaryResult.java index 3625662..ee73b7a 100644 --- a/src/main/java/eu/dnetlib/validatorapi/entities/SummaryResult.java +++ b/src/main/java/eu/dnetlib/validatorapi/entities/SummaryResult.java @@ -11,7 +11,7 @@ import java.io.Serializable; public class SummaryResult implements Serializable { @Id @Column(name="rule_name") - public String rule_name; + public String ruleName; @Id @Column(name="validation_job_id") @@ -57,16 +57,16 @@ public class SummaryResult implements Serializable { public SummaryResult(int validationJobId, String rule_name) { this.validationJobId = validationJobId; - this.rule_name = rule_name; + this.ruleName = rule_name; } public SummaryResult(String rule_name, long passed_records, long failed_records) { - this.rule_name = rule_name; + this.ruleName = rule_name; this.passed_records = passed_records; this.failed_records = failed_records; } public SummaryResult(String rule_name, int rule_weight, long passed_records, long failed_records) { - this.rule_name = rule_name; + this.ruleName = rule_name; this.rule_weight = rule_weight; this.passed_records = passed_records; this.failed_records = failed_records; @@ -76,7 +76,7 @@ public class SummaryResult implements Serializable { public SummaryResult(String rule_name, int rule_weight, String requirement_level, String description, String fair_principles, String link, String guidelines, String internal_error, long passed_records, long failed_records, String rule_status, boolean has_errors, boolean has_warnings) { - this.rule_name = rule_name; + this.ruleName = rule_name; this.rule_weight = rule_weight; this.requirement_level = requirement_level; this.description = description; @@ -93,12 +93,12 @@ public class SummaryResult implements Serializable { - public String getRule_name() { - return rule_name; + public String getRuleName() { + return ruleName; } - public void setRule_name(String rule_name) { - this.rule_name = rule_name; + public void setRuleName(String ruleName) { + this.ruleName = ruleName; } public int getValidationJobId() { @@ -208,7 +208,7 @@ public class SummaryResult implements Serializable { @Override public String toString() { return "SummaryResult{" + - "rule_name='" + rule_name + '\'' + + "rule_name='" + ruleName + '\'' + ", rule_weight=" + rule_weight + ", passed_records=" + passed_records + ", failed_records=" + failed_records + diff --git a/src/main/java/eu/dnetlib/validatorapi/entities/ValidationIssue.java b/src/main/java/eu/dnetlib/validatorapi/entities/ValidationIssue.java index 09f7344..67f16a3 100644 --- a/src/main/java/eu/dnetlib/validatorapi/entities/ValidationIssue.java +++ b/src/main/java/eu/dnetlib/validatorapi/entities/ValidationIssue.java @@ -36,7 +36,7 @@ public class ValidationIssue implements Serializable { this.issueType = issueType; } - public int getValidationJobId() { + public long getValidationJobId() { return validationJobId; } diff --git a/src/main/java/eu/dnetlib/validatorapi/processors/DataBaseProcessor.java b/src/main/java/eu/dnetlib/validatorapi/processors/DataBaseProcessor.java index 933e2bb..4ed1cf2 100644 --- a/src/main/java/eu/dnetlib/validatorapi/processors/DataBaseProcessor.java +++ b/src/main/java/eu/dnetlib/validatorapi/processors/DataBaseProcessor.java @@ -22,6 +22,7 @@ public class DataBaseProcessor implements Processor { validationJob.score = (Integer) exchange.getIn().getHeader("score"); validationJob.progress = "COMPLETED"; validationJob.endDate = new Date(); + exchange.getIn().setBody(validationJob, ValidationJob.class); } } diff --git a/src/main/java/eu/dnetlib/validatorapi/processors/SumUpNCleanProcessor.java b/src/main/java/eu/dnetlib/validatorapi/processors/SumUpNCleanProcessor.java index 9d1c08c..b2c5277 100644 --- a/src/main/java/eu/dnetlib/validatorapi/processors/SumUpNCleanProcessor.java +++ b/src/main/java/eu/dnetlib/validatorapi/processors/SumUpNCleanProcessor.java @@ -1,2 +1,63 @@ -package eu.dnetlib.validatorapi.processors;public class SumUpNCleanProcessor { +package eu.dnetlib.validatorapi.processors; + +import eu.dnetlib.validator2.validation.guideline.openaire.AbstractOpenAireProfile; +import eu.dnetlib.validatorapi.entities.SummaryResult; +import eu.dnetlib.validatorapi.entities.ValidationJob; +import eu.dnetlib.validatorapi.repositories.SummaryValidationJobRepository; +import eu.dnetlib.validatorapi.repositories.ValidationJobRepository; +import eu.dnetlib.validatorapi.repositories.ValidationResultRepository; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; + +import java.util.Date; +import java.util.List; + +public class SumUpNCleanProcessor implements Processor { + + private final ValidationJobRepository validationJobRepository; + private final ValidationResultRepository validationResultRepository; + private final SummaryValidationJobRepository summaryValidationJobRepository; + private final AbstractOpenAireProfile profile; + + public SumUpNCleanProcessor(ValidationJobRepository validationJobRepository, + ValidationResultRepository validationResultRepository, + SummaryValidationJobRepository summaryValidationJobRepository, + AbstractOpenAireProfile profile) { + this.validationJobRepository = validationJobRepository; + this.validationResultRepository = validationResultRepository; + this.summaryValidationJobRepository = summaryValidationJobRepository; + this.profile = profile; + } + + @Override + public void process(Exchange exchange) throws Exception { + + Thread stop=null; + + ValidationJob validationJob = new ValidationJob(); + validationJob.id = (Integer)exchange.getIn().getHeader("validationId"); + validationJob.baseUrl = (String)(exchange.getIn().getHeader("baseUrl")); + validationJob.set = (String)(exchange.getIn().getHeader("set")); + validationJob.startDate = (Date) exchange.getIn().getHeader("startDate"); + validationJob.guidelines = (String) exchange.getIn().getHeader("guidelines"); + validationJob.status = (String)exchange.getIn().getHeader("status"); + validationJob.recordsTested = (Integer) exchange.getIn().getHeader("recordsTested"); + validationJob.numberOfRecords = Math.toIntExact((Long) exchange.getIn().getHeader("maxNumberOfRecords")); + validationJob.score = (Integer) exchange.getIn().getHeader("score"); + validationJob.progress = "COMPLETED"; + validationJob.endDate = new Date(); + + List summaryResults = validationResultRepository.getFullSummaryResult + ((Integer) exchange.getIn().getHeader("validationId")); + + for(SummaryResult sr: summaryResults) { + sr.validationJobId = validationJob.id; + summaryValidationJobRepository.save(sr); + } + + validationResultRepository.customDeleteByGuidelines(validationJob.id, profile.name()); + validationJobRepository.save(validationJob); + + } + } diff --git a/src/main/java/eu/dnetlib/validatorapi/processors/SummaryValidationJobProcessor.java b/src/main/java/eu/dnetlib/validatorapi/processors/SummaryValidationJobProcessor.java index 4198fa3..12f4677 100644 --- a/src/main/java/eu/dnetlib/validatorapi/processors/SummaryValidationJobProcessor.java +++ b/src/main/java/eu/dnetlib/validatorapi/processors/SummaryValidationJobProcessor.java @@ -12,30 +12,30 @@ public class SummaryValidationJobProcessor implements Processor { private final ValidationResultRepository validationResultRepository; private final SummaryValidationJobRepository summaryValidationJobRepository; - int validation_job_id; + private final String routeId; public SummaryValidationJobProcessor(ValidationResultRepository validationResultRepository, SummaryValidationJobRepository summaryValidationJobRepository, - int validation_job_id){ + String routeId){ this.validationResultRepository = validationResultRepository; this.summaryValidationJobRepository = summaryValidationJobRepository; - this.validation_job_id = validation_job_id; + this.routeId = routeId; } @Override public void process(Exchange exchange) throws Exception { + int validation_job_id = (Integer) exchange.getIn().getHeader("validationId"); 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"); + ((Integer) exchange.getIn().getHeader("validationId")); for(SummaryResult sr: summaryResults) { - sr.validationJobId = validation_job_id; sr.validationJobId = validation_job_id; summaryValidationJobRepository.save(sr); } + + validationResultRepository.customDelete(validation_job_id); + + exchange.getIn().setHeader("CamelControlBusAction", "stop"); + exchange.getIn().setHeader("CamelControlBusRouteId", routeId); } } diff --git a/src/main/java/eu/dnetlib/validatorapi/processors/XmlProcessor.java b/src/main/java/eu/dnetlib/validatorapi/processors/XmlProcessor.java index 829f319..cb9b73a 100644 --- a/src/main/java/eu/dnetlib/validatorapi/processors/XmlProcessor.java +++ b/src/main/java/eu/dnetlib/validatorapi/processors/XmlProcessor.java @@ -48,10 +48,10 @@ public class XmlProcessor implements Processor { final DocumentBuilder documentBuilder = dbf.newDocumentBuilder(); Document doc = documentBuilder.parse(new InputSource(new StringReader(recordXml))); String recordUrl = extractRecordUrl(doc, "identifier"); - System.out.println("Identifier: " + recordUrl); List validationRuleResults = new ArrayList<>(); List validationIssues = new ArrayList<>(); + System.out.println("\n\n\nProcess with guideline " + profile.name()); if (profile != null) { XMLApplicationProfile.ValidationResult validationResult = profile.validate("id", doc); //what id is that? Map results = validationResult.results(); @@ -98,17 +98,26 @@ public class XmlProcessor implements Processor { // System.out.println("Validation Issues: " + validationIssues); + exchange.getIn().setHeader("MyHeader", "SKATA"); + if (processedRecords > maxNumberOfRecords) { exchange.getIn().setHeader("MyHeader", "stop"); exchange.getIn().setHeader("validationId", validationJob.id); exchange.getIn().setHeader("baseUrl", validationJob.baseUrl); exchange.getIn().setHeader("set", validationJob.set); exchange.getIn().setHeader("startDate", validationJob.startDate); + System.out.println("\n\n\n" + validationJob.id +": set guidelines "+ validationJob.guidelines + "\n\n\n"); exchange.getIn().setHeader("guidelines", validationJob.guidelines); exchange.getIn().setHeader("status", status); exchange.getIn().setHeader("recordsTested", processedRecords-1); exchange.getIn().setHeader("maxNumberOfRecords", maxNumberOfRecords); exchange.getIn().setHeader("score", scoreSum/processedRecords); + + + System.out.println("\n\n\n\n\n PLACE STOP HEADER \n\n\n\n\n\n"); + + + //exchange.setRouteStop(true); } } diff --git a/src/main/java/eu/dnetlib/validatorapi/repositories/SummaryValidationJobRepository.java b/src/main/java/eu/dnetlib/validatorapi/repositories/SummaryValidationJobRepository.java index 9e0ba58..03bf88a 100644 --- a/src/main/java/eu/dnetlib/validatorapi/repositories/SummaryValidationJobRepository.java +++ b/src/main/java/eu/dnetlib/validatorapi/repositories/SummaryValidationJobRepository.java @@ -1,6 +1,5 @@ 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; @@ -8,7 +7,7 @@ import org.springframework.stereotype.Repository; import java.util.List; @Repository -public interface SummaryValidationJobRepository extends JpaRepository { +public interface SummaryValidationJobRepository extends JpaRepository { - List findByValidationJobId(int validationJobId); + List findByValidationJobIdOrderByRuleName(int validationJobId); } diff --git a/src/main/java/eu/dnetlib/validatorapi/repositories/ValidationResultRepository.java b/src/main/java/eu/dnetlib/validatorapi/repositories/ValidationResultRepository.java index b54d844..5b0ff3d 100644 --- a/src/main/java/eu/dnetlib/validatorapi/repositories/ValidationResultRepository.java +++ b/src/main/java/eu/dnetlib/validatorapi/repositories/ValidationResultRepository.java @@ -3,14 +3,16 @@ package eu.dnetlib.validatorapi.repositories; import eu.dnetlib.validatorapi.entities.SummaryResult; import eu.dnetlib.validatorapi.entities.ValidationRuleResult; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @Repository -public interface ValidationResultRepository extends JpaRepository { +public interface ValidationResultRepository extends JpaRepository { @Query(value = "SELECT NEW eu.dnetlib.validatorapi.entities.SummaryResult(sr.ruleName, sr.ruleWeight," + @@ -39,7 +41,8 @@ public interface ValidationResultRepository extends JpaRepository 0 THEN TRUE ELSE FALSE END AS hasWarnings)" + "FROM eu.dnetlib.validatorapi.entities.ValidationRuleResult sr " + "WHERE sr.validationJobId = :id " + - "GROUP BY sr.ruleName, sr.ruleWeight, sr.description, sr.fair_principles, sr.link, sr.requirement_level, sr.guidelines, sr.internalError, sr.validationJobId") + "GROUP BY sr.ruleName, sr.ruleWeight, sr.description, sr.fair_principles, sr.link, sr.requirement_level, sr.guidelines, sr.internalError, sr.validationJobId " + + "ORDER BY sr.ruleName") List getFullSummaryResult(@Param("id") int validationJobId); @Query(value = @@ -73,4 +76,13 @@ public interface ValidationResultRepository extends JpaRepository getFullSummaryResult(@Param("id") int validationJobId, @Param("guidelines") String guidelines); + @Modifying + @Transactional + @Query("DELETE FROM ValidationRuleResult vr WHERE vr.validationJobId = :validationJobId") + void customDelete(int validationJobId); + + @Modifying + @Transactional + @Query("DELETE FROM ValidationRuleResult vr WHERE vr.validationJobId = :validationJobId and vr.guidelines =:guidelines") + void customDeleteByGuidelines(int validationJobId, String guidelines); } diff --git a/src/main/java/eu/dnetlib/validatorapi/routes/FairOaiPmhRoute2.java b/src/main/java/eu/dnetlib/validatorapi/routes/FairOaiPmhRoute2.java index 0f42653..132900e 100644 --- a/src/main/java/eu/dnetlib/validatorapi/routes/FairOaiPmhRoute2.java +++ b/src/main/java/eu/dnetlib/validatorapi/routes/FairOaiPmhRoute2.java @@ -1,14 +1,16 @@ package eu.dnetlib.validatorapi.routes; import eu.dnetlib.validator2.validation.guideline.openaire.AbstractOpenAireProfile; -import eu.dnetlib.validator2.validation.guideline.openaire.FAIR_Data_GuidelinesProfile; 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.SumUpNCleanProcessor; import eu.dnetlib.validatorapi.processors.XmlProcessor; +import eu.dnetlib.validatorapi.repositories.SummaryValidationJobRepository; +import eu.dnetlib.validatorapi.repositories.ValidationJobRepository; +import eu.dnetlib.validatorapi.repositories.ValidationResultRepository; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.TypeConversionException; @@ -19,18 +21,25 @@ import org.apache.http.client.ClientProtocolException; import java.net.UnknownHostException; import java.util.Date; import java.util.UUID; +import java.util.concurrent.RejectedExecutionException; public class FairOaiPmhRoute2 extends RouteBuilder { private String oaiEndpoint; - private AbstractOpenAireProfile profile; + private final AbstractOpenAireProfile profile; + private final AbstractOpenAireProfile fairProfile; private long maxNumberOfRecords = 0; - private ValidationJob validationJob; - String routeid; - String routeid2; + private final ValidationJob validationJob; + private String routeid; + private String routeid2; + + private ValidationJobRepository validationJobRepository; + private ValidationResultRepository validationResultRepository; + private SummaryValidationJobRepository summaryValidationJobRepository; +/* public FairOaiPmhRoute2(String oaiEndpoint, AbstractOpenAireProfile profile, ValidationJob validationJob, long maxNumberOfRecords, String routeid) { this.oaiEndpoint = oaiEndpoint; @@ -40,6 +49,24 @@ public class FairOaiPmhRoute2 extends RouteBuilder { this.routeid = routeid; this.routeid2 = UUID.randomUUID().toString(); } +*/ + + public FairOaiPmhRoute2(String oaiEndpoint, AbstractOpenAireProfile profile, AbstractOpenAireProfile fairProfile, + ValidationJob validationJob, long maxNumberOfRecords, String routeid, + ValidationJobRepository validationJobRepository, + ValidationResultRepository validationResultRepository, + SummaryValidationJobRepository summaryValidationJobRepository) { + this.oaiEndpoint = oaiEndpoint; + this.validationJob = validationJob; + this.profile = profile; + this.fairProfile = fairProfile; + this.maxNumberOfRecords = maxNumberOfRecords; + this.routeid = routeid; + this.routeid2 = UUID.randomUUID().toString(); + this.validationJobRepository = validationJobRepository; + this.validationResultRepository = validationResultRepository; + this.summaryValidationJobRepository = summaryValidationJobRepository; + } @Override public void configure() throws Exception { @@ -87,6 +114,10 @@ public class FairOaiPmhRoute2 extends RouteBuilder { .handled(true) .end(); + onException(RejectedExecutionException.class) + .handled(true) + .log("RejectedExecutionException occurred. Suspending further processing."); + from(oaiEndpoint) .routeId("1") @@ -121,8 +152,10 @@ public class FairOaiPmhRoute2 extends RouteBuilder { .end() .choice() .when(header("MyHeader").isEqualTo("stop")) - .process(new DataBaseProcessor()) - .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true")//;.to("direct:saveToDatabase") + .process(new SumUpNCleanProcessor(validationJobRepository, validationResultRepository, summaryValidationJobRepository, + profile)) + /*.process(new DataBaseProcessor()) + .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true")//;.to("direct:saveToDatabase")*/ .to("controlbus:route?routeId="+routeid+"&action=stop&async=true") .endChoice() .end(); @@ -130,7 +163,7 @@ public class FairOaiPmhRoute2 extends RouteBuilder { from("direct:fairProcessor") .routeId(routeid2) .split(xpath("//*[local-name()='record']")) - .process(new XmlProcessor(new FAIR_Data_GuidelinesProfile(), validationJob, maxNumberOfRecords)) + .process(new XmlProcessor(fairProfile, validationJob, maxNumberOfRecords)) .choice() .when(simple("${body[results]} && ${header.MyHeader} != 'stop'")) .split(simple("${body[results]}")) @@ -145,8 +178,10 @@ public class FairOaiPmhRoute2 extends RouteBuilder { .end() .choice() .when(header("MyHeader").isEqualTo("stop")) - .process(new DataBaseProcessor()) - .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true")//;.to("direct:saveToDatabase") + .process(new SumUpNCleanProcessor(validationJobRepository, validationResultRepository, summaryValidationJobRepository, + fairProfile)) + /*.process(new DataBaseProcessor()) + .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true")//;.to("direct:saveToDatabase")*/ .to("controlbus:route?routeId="+routeid2+"&action=stop&async=true") .endChoice() .end(); diff --git a/src/main/java/eu/dnetlib/validatorapi/routes/SimpleOaiPmhRoute.java b/src/main/java/eu/dnetlib/validatorapi/routes/SimpleOaiPmhRoute.java index 93b08c3..05395ac 100644 --- a/src/main/java/eu/dnetlib/validatorapi/routes/SimpleOaiPmhRoute.java +++ b/src/main/java/eu/dnetlib/validatorapi/routes/SimpleOaiPmhRoute.java @@ -4,8 +4,12 @@ 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.*; +import eu.dnetlib.validatorapi.processors.ErrorProcessor; +import eu.dnetlib.validatorapi.processors.ExceptionProcessor; +import eu.dnetlib.validatorapi.processors.SumUpNCleanProcessor; +import eu.dnetlib.validatorapi.processors.XmlProcessor; import eu.dnetlib.validatorapi.repositories.SummaryValidationJobRepository; +import eu.dnetlib.validatorapi.repositories.ValidationJobRepository; import eu.dnetlib.validatorapi.repositories.ValidationResultRepository; import org.apache.camel.Exchange; import org.apache.camel.Processor; @@ -16,6 +20,7 @@ import org.apache.http.client.ClientProtocolException; import java.net.UnknownHostException; import java.util.Date; +import java.util.concurrent.RejectedExecutionException; public class SimpleOaiPmhRoute extends RouteBuilder { @@ -26,12 +31,14 @@ public class SimpleOaiPmhRoute extends RouteBuilder { private ValidationJob validationJob; String routeid; + private ValidationJobRepository validationJobRepository; private ValidationResultRepository validationResultRepository; private SummaryValidationJobRepository summaryValidationJobRepository; public SimpleOaiPmhRoute(String oaiEndpoint, AbstractOpenAireProfile profile, ValidationJob validationJob, - long maxNumberOfRecords, String routeid, ValidationResultRepository validationResultRepository, + long maxNumberOfRecords, String routeid, ValidationJobRepository validationJobRepository, + ValidationResultRepository validationResultRepository, SummaryValidationJobRepository summaryValidationJobRepository) { this.oaiEndpoint = oaiEndpoint; this.validationJob = validationJob; @@ -41,6 +48,7 @@ public class SimpleOaiPmhRoute extends RouteBuilder { this.validationResultRepository = validationResultRepository; this.summaryValidationJobRepository = summaryValidationJobRepository; + this.validationJobRepository = validationJobRepository; } @Override @@ -55,7 +63,6 @@ public class SimpleOaiPmhRoute extends RouteBuilder { onException(TypeConversionException.class) .process(new ExceptionProcessor(validationJob)) .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true") - .to("controlbus:route?routeId="+routeid+"&action=stop") .maximumRedeliveries(0) .handled(true) .end(); @@ -63,7 +70,6 @@ public class SimpleOaiPmhRoute extends RouteBuilder { onException(ClientProtocolException.class) .process(new ExceptionProcessor(validationJob)) .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true") - .to("controlbus:route?routeId="+routeid+"&action=stop") .maximumRedeliveries(0) .handled(true) .end(); @@ -71,7 +77,6 @@ public class SimpleOaiPmhRoute extends RouteBuilder { onException(UnknownHostException.class) .process(new ExceptionProcessor(validationJob)) .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true") - .to("controlbus:route?routeId="+routeid+"&action=stop") .maximumRedeliveries(0) .handled(true) .end(); @@ -79,54 +84,50 @@ public class SimpleOaiPmhRoute extends RouteBuilder { onException(ClientProtocolException.class) .process(new ExceptionProcessor(validationJob)) .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true") - .to("controlbus:route?routeId="+routeid+"&action=stop") .maximumRedeliveries(0) .handled(true) .end(); + //TODO: Reconsider + onException(RejectedExecutionException.class) + .handled(true) // Set 'handled' to true to prevent the exception from propagating + .log("RejectedExecutionException occurred. Suspending further processing."); -/* - .process(new TypeConversionExceptionProcessor(validationJob)).log("\n\n\n\n HERE 2") - .process(new DataBaseProcessor())//.maximumRedeliveries(0) - .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true").log("\n\n\n\nHEREEEEEE") - .stop(); -*/ from(oaiEndpoint) .routeId(routeid) .choice() .when(xpath("//*[local-name()='record']")) .split(xpath("//*[local-name()='record']")) .process(new XmlProcessor(profile, validationJob, maxNumberOfRecords)) - .choice() + .choice() .when(simple("${body[results]} && ${header.MyHeader} != 'stop'")) - .split(simple("${body[results]}")) - .to("jpa:" + ValidationRuleResult.class.getName() + "?usePersist=true") - .endChoice() - .end() - .choice() + // .log("SAVING RESULTS ${header.MyHeader}") + .split(simple("${body[results]}")) + .to("jpa:" + ValidationRuleResult.class.getName() + "?usePersist=true") + .endChoice() + .end() + .choice() .when(simple("${body[issues]} && ${header.MyHeader} != 'stop'")) - .split(simple("${body[issues]}")) - .to("jpa:"+ ValidationIssue.class.getName()+ "?usePersist=true") - .endChoice() - .end() - .choice() - .when(header("MyHeader").isEqualTo("stop")) - .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() - .otherwise() - .process(new ErrorProcessor(validationJob)) - .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true") + // .log("SAVING ISSUES ${header.MyHeader}") + .split(simple("${body[issues]}")) + .to("jpa:"+ ValidationIssue.class.getName()+ "?usePersist=true") + .endChoice() + .end() + .choice() + .when(simple("${header.MyHeader} == 'stop'")) + .process(new SumUpNCleanProcessor(validationJobRepository, validationResultRepository, summaryValidationJobRepository, + profile)) + /*.process(new DataBaseProcessor()) + .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true")//;.to("direct:saveToDatabase")*/ + .to("controlbus:route?routeId="+routeid+"&action=stop&async=true") + .end() + .endChoice() + .otherwise() + .process(new ErrorProcessor(validationJob)) + .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true") + .endChoice() .end(); - from("direct:cleanDB") - .process(new SummaryValidationJobProcessor(validationResultRepository, summaryValidationJobRepository, - validationJob.id)); - /* from("direct:saveToDatabase") .routeId(routeid2)