Integrating the 871b2ec6e5 commit of validator-engine2. You need to install it locally, therefore I have added it as 1.9.9-local version in my pom.xml

This commit is contained in:
Katerina 2024-04-03 09:52:04 +03:00
parent d42d8fc09b
commit 1a99c041d3
7 changed files with 107 additions and 55 deletions

View File

@ -34,7 +34,7 @@
<dependency> <dependency>
<groupId>eu.dnetlib</groupId> <groupId>eu.dnetlib</groupId>
<artifactId>uoa-validator-engine2</artifactId> <artifactId>uoa-validator-engine2</artifactId>
<version>0.9.0</version> <version>1.9.9-local</version>
</dependency> </dependency>
<!-- spring boot --> <!-- spring boot -->

View File

@ -0,0 +1,38 @@
package eu.dnetlib.validatorapi;
import org.apache.camel.AggregationStrategy;
import org.apache.camel.Exchange;
import java.util.ArrayList;
import java.util.List;
public class RecordAggregationStrategy implements AggregationStrategy {
private static final int MAX_RECORDS = 2;
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
if (oldExchange == null) {
// First record, create a new ArrayList to store records
newExchange.getIn().setHeader("recordList", new ArrayList<>());
return newExchange;
}
// Get the list of records from the oldExchange
List<String> recordList = oldExchange.getIn().getHeader("recordList", List.class);
// Add the new record to the list
recordList.add(newExchange.getIn().getBody(String.class));
if (recordList.size() >= MAX_RECORDS) {
// Set the aggregated records as the message body
oldExchange.getIn().setBody(recordList);
// Remove the property to signal the route to stop
oldExchange.removeProperty(Exchange.ROUTE_STOP);
} else {
// Store the updated list back in the header for the next iteration
oldExchange.getIn().setHeader("recordList", recordList);
}
return oldExchange;
}
}

View File

@ -119,14 +119,14 @@ public class ValidationController {
if (profile != null) { if (profile != null) {
XMLApplicationProfile.ValidationResult validationResult = profile.validate("id", doc); //what id is that? XMLApplicationProfile.ValidationResult validationResult = profile.validate("id", doc); //what id is that?
Map<String, Guideline.Result> results = validationResult.results(); Map<String, Guideline.Result> results = validationResult.getResults();
for (Map.Entry entry : results.entrySet()) { for (Map.Entry entry : results.entrySet()) {
Guideline.Result engineResult = (Guideline.Result) entry.getValue(); Guideline.Result engineResult = (Guideline.Result) entry.getValue();
String recordUrl = extractRecordUrl(doc, "identifier"); String recordUrl = extractRecordUrl(doc, "identifier");
String ruleName = entry.getKey().toString(); String ruleName = entry.getKey().toString();
ValidationRuleResult validationRuleResult = constructValidationRuleResult(validationJob.id, recordUrl, ValidationRuleResult validationRuleResult = constructValidationRuleResult(validationJob.id, recordUrl,
ruleName, profile, engineResult); ruleName, profile, engineResult);
resultSum += engineResult.score(); resultSum += engineResult.getScore();
validationResultRepository.save(validationRuleResult); validationResultRepository.save(validationRuleResult);
//saveValidationIssues(validationJob.id, recordUrl, ruleName, engineResult); //saveValidationIssues(validationJob.id, recordUrl, ruleName, engineResult);
@ -309,9 +309,9 @@ public class ValidationController {
validationRuleResult.ruleWeight = profile.guideline(validationRuleResult.ruleName).getWeight(); validationRuleResult.ruleWeight = profile.guideline(validationRuleResult.ruleName).getWeight();
validationRuleResult.recordUrl = extractRecordUrl(document, "dc:identifier"); validationRuleResult.recordUrl = extractRecordUrl(document, "dc:identifier");
Guideline.Result engineResult = (Guideline.Result) entry.getValue(); Guideline.Result engineResult = (Guideline.Result) entry.getValue();
validationRuleResult.score = engineResult.score(); validationRuleResult.score = engineResult.getScore();
validationRuleResult.status = engineResult.status().toString(); validationRuleResult.status = engineResult.getStatus().toString();
validationRuleResult.internalError = engineResult.internalError(); validationRuleResult.internalError = engineResult.getInternalError();
} }
@ -325,9 +325,9 @@ public class ValidationController {
validationRuleResult.ruleWeight = profile.guideline(validationRuleResult.ruleName).getWeight(); validationRuleResult.ruleWeight = profile.guideline(validationRuleResult.ruleName).getWeight();
validationRuleResult.recordUrl = extractRecordUrl(document, "dc:identifier"); validationRuleResult.recordUrl = extractRecordUrl(document, "dc:identifier");
Guideline.Result engineResult = (Guideline.Result) entry.getValue(); Guideline.Result engineResult = (Guideline.Result) entry.getValue();
validationRuleResult.score = engineResult.score(); validationRuleResult.score = engineResult.getScore();
validationRuleResult.status = engineResult.status().toString(); validationRuleResult.status = engineResult.getStatus().toString();
validationRuleResult.internalError = engineResult.internalError(); validationRuleResult.internalError = engineResult.getInternalError();
return validationRuleResult; return validationRuleResult;
} }
@ -373,9 +373,9 @@ public class ValidationController {
validationRuleResult.ruleName = ruleName; validationRuleResult.ruleName = ruleName;
validationRuleResult.ruleWeight = profile.guideline(ruleName).getWeight(); validationRuleResult.ruleWeight = profile.guideline(ruleName).getWeight();
validationRuleResult.recordUrl = recordUrl; validationRuleResult.recordUrl = recordUrl;
validationRuleResult.score = engineResult.score(); validationRuleResult.score = engineResult.getScore();
validationRuleResult.status = engineResult.status().toString(); validationRuleResult.status = engineResult.getStatus().toString();
validationRuleResult.internalError = engineResult.internalError(); validationRuleResult.internalError = engineResult.getInternalError();
return validationRuleResult; return validationRuleResult;
} }
@ -432,10 +432,8 @@ public class ValidationController {
return new FAIR_Data_GuidelinesProfile(); return new FAIR_Data_GuidelinesProfile();
} else if (guidelinesProfileName.equals("OpenAIRE Guidelines for Literature Repositories Profile v4")) { } else if (guidelinesProfileName.equals("OpenAIRE Guidelines for Literature Repositories Profile v4")) {
System.out.println("\n\n\nRETURNING FAIR LITERATURE\n\n\n"); return new FAIR_Literature_GuidelinesV4Profile();
System.out.println("\n\n\n" + new FAIR_Literature_GuidelinesV4Profile().name() + "\n\n\n");
return new FAIR_Literature_GuidelinesV4Profile();
} }
return null; return null;
@ -496,7 +494,7 @@ public class ValidationController {
//what id is that? //what id is that?
XMLApplicationProfile.ValidationResult validationResult = profile.validate("id", doc); XMLApplicationProfile.ValidationResult validationResult = profile.validate("id", doc);
Map<String, Guideline.Result> results = validationResult.results(); Map<String, Guideline.Result> results = validationResult.getResults();
for (Map.Entry entry : results.entrySet()) { for (Map.Entry entry : results.entrySet()) {
ValidationRuleResult validationRuleResult = new ValidationRuleResult(); ValidationRuleResult validationRuleResult = new ValidationRuleResult();
@ -504,14 +502,14 @@ public class ValidationController {
validationRuleResult.ruleName = entry.getKey().toString(); validationRuleResult.ruleName = entry.getKey().toString();
validationRuleResult.recordUrl = "localhost://records/record["+record+"]"; // silly id validationRuleResult.recordUrl = "localhost://records/record["+record+"]"; // silly id
Guideline.Result engineResult = (Guideline.Result) entry.getValue(); Guideline.Result engineResult = (Guideline.Result) entry.getValue();
validationRuleResult.score = engineResult.score(); validationRuleResult.score = engineResult.getScore();
validationRuleResult.status = engineResult.status().toString(); validationRuleResult.status = engineResult.getStatus().toString();
validationRuleResult.internalError = engineResult.internalError(); validationRuleResult.internalError = engineResult.getInternalError();
System.out.println(validationRuleResult + " | " + validationRuleResult.hashCode() + "\n"); System.out.println(validationRuleResult + " | " + validationRuleResult.hashCode() + "\n");
validationResultRepository.save(validationRuleResult); validationResultRepository.save(validationRuleResult);
validationRuleResults.add(validationRuleResult); validationRuleResults.add(validationRuleResult);
resultSum += engineResult.score(); resultSum += engineResult.getScore();
} }

View File

@ -71,8 +71,8 @@ public class ValidatorController {
result = profile.validate("id", doc); result = profile.validate("id", doc);
Date date = new Date(); Date date = new Date();
scorePerDoc.put("input-" + date.toString(), result.score()); scorePerDoc.put("input-" + date.toString(), result.getScore());
Map<String, Guideline.Result> results = result.results(); Map<String, Guideline.Result> results = result.getResults();
log.debug("\n\nPrinting results..."); log.debug("\n\nPrinting results...");
for (Map.Entry entry : results.entrySet()) { for (Map.Entry entry : results.entrySet()) {
log.debug(entry.getKey() + " = " + entry.getValue()); log.debug(entry.getKey() + " = " + entry.getValue());
@ -81,11 +81,11 @@ public class ValidatorController {
ruleInfo.setName(entry.getKey().toString()); ruleInfo.setName(entry.getKey().toString());
Guideline.Result res = (Guideline.Result) entry.getValue(); Guideline.Result res = (Guideline.Result) entry.getValue();
ruleInfo.setErrors((List<String>) res.errors()); ruleInfo.setErrors((List<String>) res.getErrors());
ruleInfo.setWarnings((List<String>) res.warnings()); ruleInfo.setWarnings((List<String>) res.getWarnings());
ruleInfo.setInternalError(res.internalError()); ruleInfo.setInternalError(res.getInternalError());
ruleInfo.setScore(res.score()); ruleInfo.setScore(res.getScore());
ruleInfo.setStatus(res.status()); ruleInfo.setStatus(res.getStatus());
resultRules.add(ruleInfo); resultRules.add(ruleInfo);
} }
@ -107,8 +107,8 @@ public class ValidatorController {
result = fairProfile.validate("id", doc); result = fairProfile.validate("id", doc);
Date date = new Date(); Date date = new Date();
scorePerDoc.put("input-"+date.toString(), result.score()); scorePerDoc.put("input-"+date.toString(), result.getScore());
Map<String, Guideline.Result> results = result.results(); Map<String, Guideline.Result> results = result.getResults();
log.debug("\n\nPrinting FAIR results..."); log.debug("\n\nPrinting FAIR results...");
for (Map.Entry entry : results.entrySet()) { for (Map.Entry entry : results.entrySet()) {
// if (!entry.getValue().toString().contains("eu.dnetlib.validator2")) { // if (!entry.getValue().toString().contains("eu.dnetlib.validator2")) {
@ -118,11 +118,11 @@ public class ValidatorController {
ruleInfo.setName(entry.getKey().toString()); ruleInfo.setName(entry.getKey().toString());
Guideline.Result res = (Guideline.Result) entry.getValue(); Guideline.Result res = (Guideline.Result) entry.getValue();
ruleInfo.setErrors((List<String>) res.errors()); ruleInfo.setErrors((List<String>) res.getErrors());
ruleInfo.setWarnings((List<String>) res.warnings()); ruleInfo.setWarnings((List<String>) res.getWarnings());
ruleInfo.setInternalError(res.internalError()); ruleInfo.setInternalError(res.getInternalError());
ruleInfo.setScore(res.score()); ruleInfo.setScore(res.getScore());
ruleInfo.setStatus(res.status()); ruleInfo.setStatus(res.getStatus());
fairRules.add(ruleInfo); fairRules.add(ruleInfo);
// } // }
@ -182,8 +182,8 @@ public class ValidatorController {
Document doc = db.parse(filePath); Document doc = db.parse(filePath);
result = profile.validate("id", doc); result = profile.validate("id", doc);
Date date = new Date(); Date date = new Date();
scorePerDoc.put("input-"+date.toString(), result.score()); scorePerDoc.put("input-"+date.toString(), result.getScore());
Map<String, Guideline.Result> results = result.results(); Map<String, Guideline.Result> results = result.getResults();
log.debug("\n\nPrinting results..."); log.debug("\n\nPrinting results...");
for (Map.Entry entry : results.entrySet()) { for (Map.Entry entry : results.entrySet()) {
log.debug(entry.getKey() + " = " + entry.getValue()); log.debug(entry.getKey() + " = " + entry.getValue());

View File

@ -0,0 +1,12 @@
package eu.dnetlib.validatorapi.exceptions;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
public class CustomRejectedExecutionHandler implements RejectedExecutionHandler {
//@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
throw new RejectedExecutionException("Task rejected: " + r.toString());
}
}

View File

@ -48,13 +48,13 @@ public class XmlProcessor implements Processor {
final DocumentBuilder documentBuilder = dbf.newDocumentBuilder(); final DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
Document doc = documentBuilder.parse(new InputSource(new StringReader(recordXml))); Document doc = documentBuilder.parse(new InputSource(new StringReader(recordXml)));
String recordUrl = extractRecordUrl(doc, "identifier"); String recordUrl = extractRecordUrl(doc, "identifier");
System.out.println("Record url: " + recordUrl);
List<ValidationRuleResult> validationRuleResults = new ArrayList<>(); List<ValidationRuleResult> validationRuleResults = new ArrayList<>();
List<ValidationIssue> validationIssues = new ArrayList<>(); List<ValidationIssue> validationIssues = new ArrayList<>();
System.out.println("\n\n\nProcess with guideline " + profile.name());
if (profile != null) { if (profile != null) {
XMLApplicationProfile.ValidationResult validationResult = profile.validate("id", doc); //what id is that? XMLApplicationProfile.ValidationResult validationResult = profile.validate("id", doc); //what id is that?
Map<String, Guideline.Result> results = validationResult.results(); Map<String, Guideline.Result> results = validationResult.getResults();
ValidationRuleResult validationRuleResult; ValidationRuleResult validationRuleResult;
for (Map.Entry entry : results.entrySet()) { //for each rule of the record for (Map.Entry entry : results.entrySet()) { //for each rule of the record
@ -68,22 +68,22 @@ public class XmlProcessor implements Processor {
this.status = "FAILURE"; this.status = "FAILURE";
} }
if (engineResult.errors()!= null && engineResult.errors().iterator().hasNext()) { if (engineResult.getErrors()!= null && engineResult.getErrors().iterator().hasNext()) {
validationRuleResult.hasErrors = true; validationRuleResult.hasErrors = true;
for (String error:engineResult.errors()) { for (String error:engineResult.getErrors()) {
validationIssues.add(new ValidationIssue(validationJob.id, ruleName, recordUrl, error,"ERROR")); validationIssues.add(new ValidationIssue(validationJob.id, ruleName, recordUrl, error,"ERROR"));
} }
} }
if (engineResult.warnings()!= null && engineResult.warnings().iterator().hasNext()) { if (engineResult.getWarnings()!= null && engineResult.getWarnings().iterator().hasNext()) {
validationRuleResult.hasWarnings = true; validationRuleResult.hasWarnings = true;
for (String warning:engineResult.warnings()) { for (String warning:engineResult.getWarnings()) {
validationIssues.add(new ValidationIssue(validationJob.id, ruleName, recordUrl, warning, "WARNING")); validationIssues.add(new ValidationIssue(validationJob.id, ruleName, recordUrl, warning, "WARNING"));
} }
} }
validationRuleResults.add(validationRuleResult); validationRuleResults.add(validationRuleResult);
scoreSum += engineResult.score(); scoreSum += engineResult.getScore();
} }
} }
@ -98,25 +98,18 @@ public class XmlProcessor implements Processor {
// System.out.println("Validation Issues: " + validationIssues); // System.out.println("Validation Issues: " + validationIssues);
exchange.getIn().setHeader("MyHeader", "SKATA"); System.out.println("processed records: " + processedRecords);
if (processedRecords > maxNumberOfRecords) { if (processedRecords > maxNumberOfRecords) {
exchange.getIn().setHeader("MyHeader", "stop"); exchange.getIn().setHeader("MyHeader", "stop");
exchange.getIn().setHeader("validationId", validationJob.id); exchange.getIn().setHeader("validationId", validationJob.id);
exchange.getIn().setHeader("baseUrl", validationJob.baseUrl); exchange.getIn().setHeader("baseUrl", validationJob.baseUrl);
exchange.getIn().setHeader("set", validationJob.set); exchange.getIn().setHeader("set", validationJob.set);
exchange.getIn().setHeader("startDate", validationJob.startDate); 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("guidelines", validationJob.guidelines);
exchange.getIn().setHeader("status", status); exchange.getIn().setHeader("status", status);
exchange.getIn().setHeader("recordsTested", processedRecords-1); exchange.getIn().setHeader("recordsTested", processedRecords-1);
exchange.getIn().setHeader("maxNumberOfRecords", maxNumberOfRecords); exchange.getIn().setHeader("maxNumberOfRecords", maxNumberOfRecords);
exchange.getIn().setHeader("score", scoreSum/processedRecords); 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); //exchange.setRouteStop(true);
} }
} }
@ -157,8 +150,8 @@ public class XmlProcessor implements Processor {
} }
validationRuleResult.recordUrl = recordUrl; validationRuleResult.recordUrl = recordUrl;
validationRuleResult.score = engineResult.score(); validationRuleResult.score = engineResult.getScore();
validationRuleResult.status = engineResult.status().toString(); validationRuleResult.status = engineResult.getStatus().toString();
validationRuleResult.internalError = engineResult.internalError(); validationRuleResult.internalError = engineResult.getInternalError();
} }
} }

View File

@ -6,4 +6,15 @@ spring.datasource.username=dnet
spring.datasource.password=pass spring.datasource.password=pass
#drop n create table again, good for testing, comment this in production or set as validate #drop n create table again, good for testing, comment this in production or set as validate
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update
#springdoc.packagesToScan=eu.dnetlib.validatorapi.controllers
#eu.dnetlib.validatorapi.controllers=/v1
#spring.mvc.pathmatch.matching-strategy=ant-path-matcher
#logging.level.org.apache.camel=error
logging.level.eu.dnetlib.validator2.validation.guideline=OFF
#camel.springboot.tracing=true
logging.level.org.hibernate.SQL=info
#logging.level.org.hibernate.type.descriptor.sql=trace