- Fix Logging System not working; Move to Logback and integrate all logs which were printed with "System.out".
- Update dependencies. - Code polishing.
This commit is contained in:
parent
1ece17e0a7
commit
fd99f536d3
86
pom.xml
86
pom.xml
|
@ -13,38 +13,8 @@
|
||||||
<!-- <timestamp>${maven.build.timestamp}</timestamp>-->
|
<!-- <timestamp>${maven.build.timestamp}</timestamp>-->
|
||||||
<!-- <maven.build.timestamp.format>E MMM dd HH:mm:ss z yyyy</maven.build.timestamp.format>-->
|
<!-- <maven.build.timestamp.format>E MMM dd HH:mm:ss z yyyy</maven.build.timestamp.format>-->
|
||||||
<!-- </properties>-->
|
<!-- </properties>-->
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>commons-io</groupId>
|
|
||||||
<artifactId>commons-io</artifactId>
|
|
||||||
<version>2.11.0</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.google.guava</groupId>
|
|
||||||
<artifactId>guava</artifactId>
|
|
||||||
<version>31.1-jre</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.logging.log4j</groupId>
|
|
||||||
<artifactId>log4j-api</artifactId>
|
|
||||||
<version>2.20.0</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.logging.log4j</groupId>
|
|
||||||
<artifactId>log4j-core</artifactId>
|
|
||||||
<version>2.20.0</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.spockframework</groupId>
|
|
||||||
<artifactId>spock-core</artifactId>
|
|
||||||
<version>1.3-groovy-2.5</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
|
@ -60,11 +30,61 @@
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-war-plugin</artifactId>
|
<artifactId>maven-war-plugin</artifactId>
|
||||||
<version>3.3.2</version>
|
<version>3.4.0</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-io</groupId>
|
||||||
|
<artifactId>commons-io</artifactId>
|
||||||
|
<version>2.13.0</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.guava</groupId>
|
||||||
|
<artifactId>guava</artifactId>
|
||||||
|
<version>32.1.1-jre</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.spockframework</groupId>
|
||||||
|
<artifactId>spock-core</artifactId>
|
||||||
|
<version>1.3-groovy-2.5</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- logback versions 1.4.X require Java-11 -->
|
||||||
|
<!-- logback versions 1.3.X require Java-8, but id this project is added as Dependency in Spring Boot, then Spring Boot throws an error, since it does not yet support logback 1.3.x -->
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>ch.qos.logback</groupId>
|
||||||
|
<artifactId>logback-core</artifactId>
|
||||||
|
<version>1.2.12</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>1.7.36</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>ch.qos.logback</groupId>
|
||||||
|
<artifactId>logback-classic</artifactId>
|
||||||
|
<version>1.2.12</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -4,6 +4,7 @@ import eu.dnetlib.validator2.validation.guideline.Builders;
|
||||||
import eu.dnetlib.validator2.validation.guideline.Builders.ElementSpecBuilder;
|
import eu.dnetlib.validator2.validation.guideline.Builders.ElementSpecBuilder;
|
||||||
import eu.dnetlib.validator2.validation.guideline.Cardinality;
|
import eu.dnetlib.validator2.validation.guideline.Cardinality;
|
||||||
import eu.dnetlib.validator2.validation.guideline.RequirementLevel;
|
import eu.dnetlib.validator2.validation.guideline.RequirementLevel;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
|
|
||||||
|
@ -24,6 +25,9 @@ import java.util.zip.ZipInputStream;
|
||||||
|
|
||||||
public class Helper {
|
public class Helper {
|
||||||
|
|
||||||
|
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Helper.class);
|
||||||
|
|
||||||
|
|
||||||
private static final String EMPTY = "";
|
private static final String EMPTY = "";
|
||||||
|
|
||||||
public static boolean isEmpty(String s) {
|
public static boolean isEmpty(String s) {
|
||||||
|
@ -116,15 +120,15 @@ public class Helper {
|
||||||
int len = nodes.getLength();
|
int len = nodes.getLength();
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
Node node = nodes.item(i);
|
Node node = nodes.item(i);
|
||||||
// System.out.println("Getting node: " + node);
|
//logger.debug("Getting node: " + node);
|
||||||
T t = nodeReader.apply(node);
|
T t = nodeReader.apply(node);
|
||||||
// System.out.println("Read node value: " + t);
|
//logger.debug("Read node value: " + t);
|
||||||
if (predicate.test(t)) {
|
if (predicate.test(t)) {
|
||||||
filtered.add(node);
|
filtered.add(node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// System.out.println(filtered.size() + " nodes matched the predicate");
|
//logger.debug(filtered.size() + " nodes matched the predicate");
|
||||||
return new ListOfNodes(filtered);
|
return new ListOfNodes(filtered);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
package eu.dnetlib.validator2.engine;
|
package eu.dnetlib.validator2.engine;
|
||||||
|
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
public class Reporter<T, R extends Rule<T>> {
|
public class Reporter<T, R extends Rule<T>> {
|
||||||
|
|
||||||
|
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Reporter.class);
|
||||||
|
|
||||||
|
|
||||||
private final RuleDiagnostics<T, R> diagnostics;
|
private final RuleDiagnostics<T, R> diagnostics;
|
||||||
|
|
||||||
public Reporter(RuleDiagnostics<T, R> diagnostics) {
|
public Reporter(RuleDiagnostics<T, R> diagnostics) {
|
||||||
|
@ -11,30 +16,24 @@ public class Reporter<T, R extends Rule<T>> {
|
||||||
public void reportSuccessFor(R rule, T t) {
|
public void reportSuccessFor(R rule, T t) {
|
||||||
try {
|
try {
|
||||||
diagnostics.success(rule, t);
|
diagnostics.success(rule, t);
|
||||||
}
|
} catch (Throwable throwable) {
|
||||||
catch(Throwable throwable) {
|
logger.error("Failed to report success of applying " + rule + " to value: " + t, throwable);
|
||||||
System.err.println("Failed to report success of applying " + rule + " to value: " + t);
|
|
||||||
throwable.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reportFailureFor(R rule, T t) {
|
public void reportFailureFor(R rule, T t) {
|
||||||
try {
|
try {
|
||||||
diagnostics.failure(rule, t);
|
diagnostics.failure(rule, t);
|
||||||
}
|
} catch (Throwable throwable) {
|
||||||
catch(Throwable throwable) {
|
logger.error("Failed to report failure of applying " + rule + " to value: " + t, throwable);
|
||||||
System.err.println("Failed to report failure of applying " + rule + " to value: " + t);
|
|
||||||
throwable.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reportErrorFor(R rule, T t, Throwable throwable) {
|
public void reportErrorFor(R rule, T t, Throwable throwable) {
|
||||||
try {
|
try {
|
||||||
diagnostics.error(rule, t, throwable);
|
diagnostics.error(rule, t, throwable);
|
||||||
}
|
} catch (Throwable throwable1) {
|
||||||
catch(Throwable throwable1) {
|
logger.error("Failed to report error of applying " + rule + " to value: " + t, throwable);
|
||||||
System.err.println("Failed to report error of applying " + rule + " to value: " + t);
|
|
||||||
throwable1.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,14 +3,13 @@ package eu.dnetlib.validator2.engine.builtins;
|
||||||
import eu.dnetlib.validator2.engine.Rule;
|
import eu.dnetlib.validator2.engine.Rule;
|
||||||
import eu.dnetlib.validator2.engine.RuleContext;
|
import eu.dnetlib.validator2.engine.RuleContext;
|
||||||
import eu.dnetlib.validator2.engine.RuleEvaluationException;
|
import eu.dnetlib.validator2.engine.RuleEvaluationException;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
|
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
public class SimpleRule<T, C extends RuleContext> implements Rule<T> {
|
public class SimpleRule<T, C extends RuleContext> implements Rule<T> {
|
||||||
|
|
||||||
private static final Logger logger = LogManager.getLogger();
|
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SimpleRule.class);
|
||||||
|
|
||||||
private final C context;
|
private final C context;
|
||||||
private final Predicate<T> predicate;
|
private final Predicate<T> predicate;
|
||||||
|
|
|
@ -3,8 +3,7 @@ package eu.dnetlib.validator2.engine.builtins;
|
||||||
import eu.dnetlib.validator2.engine.Rule;
|
import eu.dnetlib.validator2.engine.Rule;
|
||||||
import eu.dnetlib.validator2.engine.RuleEvaluationException;
|
import eu.dnetlib.validator2.engine.RuleEvaluationException;
|
||||||
import eu.dnetlib.validator2.engine.contexts.XMLContext;
|
import eu.dnetlib.validator2.engine.contexts.XMLContext;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
|
|
||||||
|
@ -16,7 +15,7 @@ import java.util.function.Predicate;
|
||||||
*/
|
*/
|
||||||
public class XMLRule<C extends XMLContext> implements Rule<Document> {
|
public class XMLRule<C extends XMLContext> implements Rule<Document> {
|
||||||
|
|
||||||
private static final Logger logger = LogManager.getLogger();
|
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(XMLRule.class);
|
||||||
private final C context;
|
private final C context;
|
||||||
public final Predicate<NodeList> predicate;
|
public final Predicate<NodeList> predicate;
|
||||||
|
|
||||||
|
|
|
@ -10,9 +10,7 @@ import java.util.function.Predicate;
|
||||||
public class XMLValidURLRule extends XMLRule<XMLContext> {
|
public class XMLValidURLRule extends XMLRule<XMLContext> {
|
||||||
|
|
||||||
protected XMLValidURLRule(XMLContext context) {
|
protected XMLValidURLRule(XMLContext context) {
|
||||||
super(context, (NodeList nodes) -> {
|
super(context, (NodeList nodes) -> context.getNodeListActionProperty().test(nodes, (Predicate<String>) Helper.URLResolver::resolve));
|
||||||
return context.getNodeListActionProperty().test(nodes, (Predicate<String>) Helper.URLResolver::resolve);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Builder builder() {
|
public static Builder builder() {
|
||||||
|
|
|
@ -4,8 +4,7 @@ import com.google.common.cache.CacheBuilder;
|
||||||
import com.google.common.cache.CacheLoader;
|
import com.google.common.cache.CacheLoader;
|
||||||
import com.google.common.cache.LoadingCache;
|
import com.google.common.cache.LoadingCache;
|
||||||
import eu.dnetlib.validator2.engine.RuleEvaluationException;
|
import eu.dnetlib.validator2.engine.RuleEvaluationException;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
|
@ -17,7 +16,7 @@ import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
public class XPathExpressionHelper {
|
public class XPathExpressionHelper {
|
||||||
|
|
||||||
private static final Logger logger = LogManager.getLogger();
|
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(XPathExpressionHelper.class);
|
||||||
|
|
||||||
// XPath expression compilation
|
// XPath expression compilation
|
||||||
private static final XPath XPATH = XPathFactory.newInstance().newXPath();
|
private static final XPath XPATH = XPathFactory.newInstance().newXPath();
|
||||||
|
|
|
@ -2,11 +2,16 @@ package eu.dnetlib.validator2.engine.contexts;
|
||||||
|
|
||||||
import eu.dnetlib.validator2.engine.Helper;
|
import eu.dnetlib.validator2.engine.Helper;
|
||||||
import eu.dnetlib.validator2.engine.RuleContext;
|
import eu.dnetlib.validator2.engine.RuleContext;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
public interface CardinalityContext extends RuleContext {
|
public interface CardinalityContext extends RuleContext {
|
||||||
|
|
||||||
|
Logger logger = LoggerFactory.getLogger(CardinalityContext.class);
|
||||||
|
|
||||||
|
|
||||||
String GREATER_THAN_PROPERTY_NAME = "gt";
|
String GREATER_THAN_PROPERTY_NAME = "gt";
|
||||||
String LESS_THAN_PROPERTY_NAME = "lt";
|
String LESS_THAN_PROPERTY_NAME = "lt";
|
||||||
String UPPER_BOUND_PROPERTY_NAME = LESS_THAN_PROPERTY_NAME;
|
String UPPER_BOUND_PROPERTY_NAME = LESS_THAN_PROPERTY_NAME;
|
||||||
|
@ -20,7 +25,7 @@ public interface CardinalityContext extends RuleContext {
|
||||||
BooleanRuleProperty getIsInclusiveProperty();
|
BooleanRuleProperty getIsInclusiveProperty();
|
||||||
|
|
||||||
default Predicate<Integer> cardinalityPredicate() {
|
default Predicate<Integer> cardinalityPredicate() {
|
||||||
// System.out.println("Evaluating cardinality " + getIdProperty().getValue());
|
logger.debug("Evaluating cardinality " + getIdProperty().getValue());
|
||||||
long min = getLowerBoundProperty().getLongValue();
|
long min = getLowerBoundProperty().getLongValue();
|
||||||
long max = getUpperBoundProperty().getLongValue();
|
long max = getUpperBoundProperty().getLongValue();
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,8 @@ import eu.dnetlib.validator2.engine.builtins.StandardXMLContext;
|
||||||
import eu.dnetlib.validator2.engine.builtins.XMLRule;
|
import eu.dnetlib.validator2.engine.builtins.XMLRule;
|
||||||
import eu.dnetlib.validator2.engine.builtins.XPathExpressionHelper;
|
import eu.dnetlib.validator2.engine.builtins.XPathExpressionHelper;
|
||||||
import eu.dnetlib.validator2.engine.contexts.XMLContext;
|
import eu.dnetlib.validator2.engine.contexts.XMLContext;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.slf4j.Logger;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
|
@ -25,7 +25,7 @@ import java.util.stream.Stream;
|
||||||
|
|
||||||
class ElementSpecCompiler {
|
class ElementSpecCompiler {
|
||||||
|
|
||||||
private static final Logger logger = LogManager.getLogger();
|
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(ElementSpecCompiler.class);
|
||||||
|
|
||||||
private static final String[] EMPTY = new String[]{};
|
private static final String[] EMPTY = new String[]{};
|
||||||
|
|
||||||
|
@ -288,6 +288,9 @@ class ElementSpecCompiler {
|
||||||
|
|
||||||
private static class ElementStruct {
|
private static class ElementStruct {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(ElementStruct.class);
|
||||||
|
|
||||||
|
|
||||||
Supplier<GuidelineEvaluation> runtimeInfo;
|
Supplier<GuidelineEvaluation> runtimeInfo;
|
||||||
final ElementSpec spec;
|
final ElementSpec spec;
|
||||||
final String[] parentElementNames;
|
final String[] parentElementNames;
|
||||||
|
@ -334,7 +337,7 @@ class ElementSpecCompiler {
|
||||||
if (spec.position().xpath != null) {
|
if (spec.position().xpath != null) {
|
||||||
xpath = "(" + xpath + ")[" + spec.position().xpath + "]";
|
xpath = "(" + xpath + ")[" + spec.position().xpath + "]";
|
||||||
}
|
}
|
||||||
// System.out.println(xpath);
|
logger.debug(xpath);
|
||||||
return xpathWithText(xpath, withText);
|
return xpathWithText(xpath, withText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@ package eu.dnetlib.validator2.validation.guideline;
|
||||||
|
|
||||||
import eu.dnetlib.validator2.engine.*;
|
import eu.dnetlib.validator2.engine.*;
|
||||||
import eu.dnetlib.validator2.engine.builtins.StandardRuleDiagnostics;
|
import eu.dnetlib.validator2.engine.builtins.StandardRuleDiagnostics;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
|
|
||||||
|
@ -12,6 +14,9 @@ import java.util.Map;
|
||||||
|
|
||||||
class GuidelineEvaluation {
|
class GuidelineEvaluation {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(GuidelineEvaluation.class);
|
||||||
|
|
||||||
|
|
||||||
// TODO: Report all rule diagnostics to System out/err (we should remove this or allow clients to disable it)
|
// TODO: Report all rule diagnostics to System out/err (we should remove this or allow clients to disable it)
|
||||||
private static final RuleDiagnostics<Document, Rule<Document>> OUT = Helper.Diagnostics.systemOut();
|
private static final RuleDiagnostics<Document, Rule<Document>> OUT = Helper.Diagnostics.systemOut();
|
||||||
private static final RuleDiagnostics<Document, Rule<Document>> ERR = Helper.Diagnostics.systemErr();
|
private static final RuleDiagnostics<Document, Rule<Document>> ERR = Helper.Diagnostics.systemErr();
|
||||||
|
@ -40,7 +45,7 @@ class GuidelineEvaluation {
|
||||||
rules.add(result.rootNodeRule);
|
rules.add(result.rootNodeRule);
|
||||||
rules.addAll(result.nodeRules);
|
rules.addAll(result.nodeRules);
|
||||||
|
|
||||||
// System.out.println("Evaluating " + rules);
|
logger.debug("Evaluating " + rules);
|
||||||
|
|
||||||
for (SyntheticRule<Document> rule: rules) {
|
for (SyntheticRule<Document> rule: rules) {
|
||||||
|
|
||||||
|
@ -58,7 +63,7 @@ class GuidelineEvaluation {
|
||||||
// Report the non-applicability of a rule as a warning
|
// Report the non-applicability of a rule as a warning
|
||||||
// The check for both status and non-applicable requirement level is redundant
|
// The check for both status and non-applicable requirement level is redundant
|
||||||
// (non-applicable rules always succeed), yet it is more clear hopefully.
|
// (non-applicable rules always succeed), yet it is more clear hopefully.
|
||||||
// System.out.println("Warn for non-applicable: " + rule);
|
logger.warn("Non-applicable: " + rule);
|
||||||
warnings.add(synthesizeFailureMessage(rule));
|
warnings.add(synthesizeFailureMessage(rule));
|
||||||
}
|
}
|
||||||
else if (status == Status.FAILURE) {
|
else if (status == Status.FAILURE) {
|
||||||
|
@ -70,7 +75,7 @@ class GuidelineEvaluation {
|
||||||
// This is the root rule failing!
|
// This is the root rule failing!
|
||||||
// Fail fast here, too (don't waste resources to evaluate other rules).
|
// Fail fast here, too (don't waste resources to evaluate other rules).
|
||||||
// We will "enable" it, if it is requested.
|
// We will "enable" it, if it is requested.
|
||||||
// System.out.println("Fail fast for root failure: " + rule);
|
logger.error("Fail fast for root failure: " + rule);
|
||||||
errors.add(synthesizeFailureMessage(rule));
|
errors.add(synthesizeFailureMessage(rule));
|
||||||
return StandardResult.forFailure(warnings, errors);
|
return StandardResult.forFailure(warnings, errors);
|
||||||
}
|
}
|
||||||
|
@ -79,7 +84,7 @@ class GuidelineEvaluation {
|
||||||
// (a) is non-mandatory or
|
// (a) is non-mandatory or
|
||||||
// (b) it was successful.
|
// (b) it was successful.
|
||||||
// Thus, here we need only to warn and not to err, allowing the evaluation loop to proceed.
|
// Thus, here we need only to warn and not to err, allowing the evaluation loop to proceed.
|
||||||
// System.out.println("Warn for mandatory failure: " + rule);
|
logger.warn("Mandatory failure: " + rule);
|
||||||
warnings.add(synthesizeFailureMessage(rule));
|
warnings.add(synthesizeFailureMessage(rule));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -87,7 +92,7 @@ class GuidelineEvaluation {
|
||||||
// This is a warning: a non-mandatory rule has failed.
|
// This is a warning: a non-mandatory rule has failed.
|
||||||
// Note that MA rules are treated as non-mandatory.
|
// Note that MA rules are treated as non-mandatory.
|
||||||
// We let the evaluation loop proceed.
|
// We let the evaluation loop proceed.
|
||||||
// System.out.println("Warn for optional/recommended failure: " + rule);
|
logger.warn("Optional/Recommended failure: " + rule);
|
||||||
warnings.add(synthesizeFailureMessage(rule));
|
warnings.add(synthesizeFailureMessage(rule));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,13 +4,12 @@ import eu.dnetlib.validator2.engine.Helper;
|
||||||
import eu.dnetlib.validator2.engine.Rule;
|
import eu.dnetlib.validator2.engine.Rule;
|
||||||
import eu.dnetlib.validator2.engine.RuleContext;
|
import eu.dnetlib.validator2.engine.RuleContext;
|
||||||
import eu.dnetlib.validator2.engine.RuleEvaluationException;
|
import eu.dnetlib.validator2.engine.RuleEvaluationException;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
|
|
||||||
public final class SyntheticGuideline extends AbstractGuideline<Document> {
|
public final class SyntheticGuideline extends AbstractGuideline<Document> {
|
||||||
|
|
||||||
private static final Logger logger = LogManager.getLogger();
|
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SyntheticGuideline.class);
|
||||||
|
|
||||||
private CompilationResult compilationResult;
|
private CompilationResult compilationResult;
|
||||||
private static final ThreadLocal<GuidelineEvaluation> evaluation = new ThreadLocal<>();
|
private static final ThreadLocal<GuidelineEvaluation> evaluation = new ThreadLocal<>();
|
||||||
|
|
|
@ -10,6 +10,8 @@ import eu.dnetlib.validator2.validation.StandardValidationResult;
|
||||||
import eu.dnetlib.validator2.validation.XMLApplicationProfile;
|
import eu.dnetlib.validator2.validation.XMLApplicationProfile;
|
||||||
import eu.dnetlib.validator2.validation.guideline.ElementSpec;
|
import eu.dnetlib.validator2.validation.guideline.ElementSpec;
|
||||||
import eu.dnetlib.validator2.validation.guideline.Guideline;
|
import eu.dnetlib.validator2.validation.guideline.Guideline;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
|
@ -19,6 +21,9 @@ import java.util.Map;
|
||||||
|
|
||||||
public abstract class AbstractOpenAireProfile implements XMLApplicationProfile {
|
public abstract class AbstractOpenAireProfile implements XMLApplicationProfile {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(AbstractOpenAireProfile.class);
|
||||||
|
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
public AbstractOpenAireProfile(String name) {
|
public AbstractOpenAireProfile(String name) {
|
||||||
|
@ -42,7 +47,7 @@ public abstract class AbstractOpenAireProfile implements XMLApplicationProfile {
|
||||||
results.put(guideline.getName(), result);
|
results.put(guideline.getName(), result);
|
||||||
|
|
||||||
score += (result.status() == Status.SUCCESS ? result.score() : 0);
|
score += (result.status() == Status.SUCCESS ? result.score() : 0);
|
||||||
// System.out.println("Score after " + guideline.getName() + " = " + score);
|
logger.debug("Score after " + guideline.getName() + " = " + score);
|
||||||
}
|
}
|
||||||
|
|
||||||
double percentScore = (score / maxScore) * 100;
|
double percentScore = (score / maxScore) * 100;
|
||||||
|
|
|
@ -5,6 +5,8 @@ package eu.dnetlib.validator2.validation.guideline.openaire;
|
||||||
import eu.dnetlib.validator2.engine.Status;
|
import eu.dnetlib.validator2.engine.Status;
|
||||||
import eu.dnetlib.validator2.validation.XMLApplicationProfile;
|
import eu.dnetlib.validator2.validation.XMLApplicationProfile;
|
||||||
import eu.dnetlib.validator2.validation.guideline.*;
|
import eu.dnetlib.validator2.validation.guideline.*;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@ -15,6 +17,8 @@ import static eu.dnetlib.validator2.validation.guideline.Cardinality.ONE_TO_N;
|
||||||
|
|
||||||
public final class FAIR_Data_GuidelinesProfile extends AbstractOpenAireProfile {
|
public final class FAIR_Data_GuidelinesProfile extends AbstractOpenAireProfile {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(FAIR_Data_GuidelinesProfile.class);
|
||||||
|
|
||||||
private static final String[] TITLE_TYPES = {
|
private static final String[] TITLE_TYPES = {
|
||||||
"AlternativeTitle", "Subtitle", "TranslatedTitle", "Other"
|
"AlternativeTitle", "Subtitle", "TranslatedTitle", "Other"
|
||||||
};
|
};
|
||||||
|
@ -291,82 +295,86 @@ public final class FAIR_Data_GuidelinesProfile extends AbstractOpenAireProfile {
|
||||||
|
|
||||||
|
|
||||||
//// TODO this goes to FAIRProfile
|
//// TODO this goes to FAIRProfile
|
||||||
//class MetadataCompleteness extends AbstractGuideline<Document> {
|
/*class MetadataCompleteness extends AbstractGuideline<Document> {
|
||||||
//
|
|
||||||
// public MetadataCompleteness() {
|
private static final Logger logger = LoggerFactory.getLogger(MetadataCompleteness.class);
|
||||||
// super("MetadataCompleteness", 40);
|
|
||||||
// }
|
|
||||||
//
|
public MetadataCompleteness() {
|
||||||
// @Override
|
super("MetadataCompleteness", 40);
|
||||||
// public Result validate(String id, Document t) {
|
}
|
||||||
// DataArchiveGuidelinesV2Profile profile = new DataArchiveGuidelinesV2Profile();
|
|
||||||
//
|
@Override
|
||||||
// // <></>ODO: iterate over results and build one Guideline.Result
|
public Result validate(String id, Document t) {
|
||||||
// try {
|
DataArchiveGuidelinesV2Profile profile = new DataArchiveGuidelinesV2Profile();
|
||||||
//// System.out.println("Processing MetadataCompleteness...");
|
|
||||||
// XMLApplicationProfile.ValidationResult res = profile.validate(id, t);
|
// <></>ODO: iterate over results and build one Guideline.Result
|
||||||
// Map<String, Result> results = res.results();
|
try {
|
||||||
// int MaxScoreMetadataCompleteness = (int) ((res.score()*getWeight())/100);
|
// System.out.println("Processing MetadataCompleteness...");
|
||||||
//
|
XMLApplicationProfile.ValidationResult res = profile.validate(id, t);
|
||||||
//// System.out.println("Max score DataValidator(%): " + res.score());
|
Map<String, Result> results = res.results();
|
||||||
//// System.out.println("Weight FAIRG: " + getWeight());
|
int MaxScoreMetadataCompleteness = (int) ((res.score()*getWeight())/100);
|
||||||
//// System.out.println("Max score MetadataCompleteness: " + MaxScoreMetadataCompleteness);
|
|
||||||
//// System.out.println("\n\n\n\n");
|
logger.debug("Max score DataValidator(%): " + res.score());
|
||||||
//
|
logger.debug("Weight FAIRG: " + getWeight());
|
||||||
//// for (Map.Entry entry : results.entrySet()) {
|
logger.debug("Max score MetadataCompleteness: " + MaxScoreMetadataCompleteness);
|
||||||
//// System.out.println(entry.getKey() + " = " + entry.getValue());
|
logger.debug("\n\n\n\n");
|
||||||
//// }
|
|
||||||
//// System.out.println(score);
|
if ( logger.isDebugEnabled() ) {
|
||||||
// return getResult(MaxScoreMetadataCompleteness);
|
for ( Map.Entry entry : results.entrySet() ) {
|
||||||
//
|
logger.debug(entry.getKey() + " = " + entry.getValue());
|
||||||
//// System.out.println(tempp.status() + " - " + tempp.score());
|
}
|
||||||
//// String printout = results.entrySet().stream().
|
}
|
||||||
//// map(entry -> entry.getValue() + ": " + entry.getKey()).collect(Collectors.joining("\n"));
|
|
||||||
//// System.out.println(printout);
|
logger.debug(results.entrySet().stream().
|
||||||
//
|
map(entry -> entry.getValue() + ": " + entry.getKey()).collect(Collectors.joining("\n")));
|
||||||
//// System.out.println("\n\n\n\n");
|
|
||||||
// } catch (Exception e) {
|
return getResult(MaxScoreMetadataCompleteness);
|
||||||
// System.out.println(e.getMessage());
|
|
||||||
// System.out.println(e);
|
} catch (Exception e) {
|
||||||
// e.printStackTrace();
|
System.out.println(e.getMessage());
|
||||||
// }
|
System.out.println(e);
|
||||||
//
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Result getResult(int score) {
|
||||||
|
String aa;
|
||||||
|
aa = (score > 0) ? "SUCCESS" : "FAILURE";
|
||||||
|
return new Result() {
|
||||||
|
@Override
|
||||||
|
public int score() {
|
||||||
|
return score;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Status status() {
|
||||||
// return null;
|
// return null;
|
||||||
// }
|
return Status.valueOf(aa);
|
||||||
//
|
}
|
||||||
// private static Result getResult(int score) {
|
|
||||||
// String aa;
|
@Override
|
||||||
// aa = (score > 0) ? "SUCCESS" : "FAILURE";
|
public Iterable<String> warnings() { return null; }
|
||||||
// return new Result() {
|
|
||||||
// @Override
|
@Override
|
||||||
// public int score() {
|
public Iterable<String> errors() {
|
||||||
// return score;
|
return null;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Override
|
@Override
|
||||||
// public Status status() {
|
public String internalError() {
|
||||||
//// return null;
|
return null;
|
||||||
// return Status.valueOf(aa);
|
}
|
||||||
// }
|
};
|
||||||
//
|
}
|
||||||
// @Override
|
}*/
|
||||||
// public Iterable<String> warnings() { return null; }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public Iterable<String> errors() {
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public String internalError() {
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
class F2_01M_SPEC extends AbstractGuideline<Document> {
|
class F2_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(F2_01M_SPEC.class);
|
||||||
|
|
||||||
public F2_01M_SPEC() {
|
public F2_01M_SPEC() {
|
||||||
super("Rich metadata is provided to allow discovery", 2*6);
|
super("Rich metadata is provided to allow discovery", 2*6);
|
||||||
}
|
}
|
||||||
|
@ -382,9 +390,9 @@ class F2_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
// Get actual score and not (%) to incorporate to FAIR score
|
// Get actual score and not (%) to incorporate to FAIR score
|
||||||
final int MaxScoreF2_01M_SPEC = (int) ((res_F.score()*getWeight())/100);
|
final int MaxScoreF2_01M_SPEC = (int) ((res_F.score()*getWeight())/100);
|
||||||
|
|
||||||
// System.out.println("Max score DataValidator(%): " + res_F.score());
|
logger.debug("Max score DataValidator(%): " + res_F.score());
|
||||||
// System.out.println("Weight FAIRG: " + getWeight());
|
logger.debug("Weight FAIRG: " + getWeight());
|
||||||
// System.out.println("Max score F2_01M_SPEC: " + MaxScoreF2_01M_SPEC);
|
logger.debug("Max score F2_01M_SPEC: " + MaxScoreF2_01M_SPEC);
|
||||||
|
|
||||||
List<String> warnings2 = new ArrayList<>();
|
List<String> warnings2 = new ArrayList<>();
|
||||||
List<String> errors2 = new ArrayList<>();
|
List<String> errors2 = new ArrayList<>();
|
||||||
|
@ -400,8 +408,8 @@ class F2_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
if (entry.getValue().toString().contains("SUCCESS")) {
|
if (entry.getValue().toString().contains("SUCCESS")) {
|
||||||
score += 2;
|
score += 2;
|
||||||
}
|
}
|
||||||
// System.out.println(res_F.results().get(entry.getKey()).warnings().getClass());
|
logger.debug(String.valueOf(res_F.results().get(entry.getKey()).warnings().getClass()));
|
||||||
// System.out.println(warnings2.getClass());
|
logger.debug(String.valueOf(warnings2.getClass()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -410,9 +418,7 @@ class F2_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
return new StandardResult(ress.score(), ress.status(), (List<String>) ress.warnings(), (List<String>) ress.errors(), ress.internalError());
|
return new StandardResult(ress.score(), ress.status(), (List<String>) ress.warnings(), (List<String>) ress.errors(), ress.internalError());
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.println(e.getMessage());
|
logger.error("", e);
|
||||||
System.out.println(e);
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -451,6 +457,9 @@ class F2_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
|
|
||||||
class F3_01M_SPEC extends AbstractGuideline<Document> {
|
class F3_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(F3_01M_SPEC.class);
|
||||||
|
|
||||||
|
|
||||||
public F3_01M_SPEC() { super("Metadata includes the identifier for the data", 2*2); }
|
public F3_01M_SPEC() { super("Metadata includes the identifier for the data", 2*2); }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -488,9 +497,7 @@ class F3_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
return new StandardResult(ress.score(), ress.status(), (List<String>) ress.warnings(), (List<String>) ress.errors(), ress.internalError());
|
return new StandardResult(ress.score(), ress.status(), (List<String>) ress.warnings(), (List<String>) ress.errors(), ress.internalError());
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.println(e.getMessage());
|
logger.error("", e);
|
||||||
System.out.println(e);
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -527,6 +534,8 @@ class F3_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
|
|
||||||
class I2_01M_SPEC extends AbstractGuideline<Document> {
|
class I2_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(I2_01M_SPEC.class);
|
||||||
|
|
||||||
public I2_01M_SPEC() { super("Metadata uses FAIR-compliant vocabularies", 5*2); }
|
public I2_01M_SPEC() { super("Metadata uses FAIR-compliant vocabularies", 5*2); }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -535,7 +544,7 @@ class I2_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
|
|
||||||
// TODO: iterate over results and build one Guideline.Result
|
// TODO: iterate over results and build one Guideline.Result
|
||||||
try {
|
try {
|
||||||
// System.out.println("\nMetadata uses FAIR-compliant vocabularies");
|
logger.debug("\nMetadata uses FAIR-compliant vocabularies");
|
||||||
XMLApplicationProfile.ValidationResult res_F = profile.validate(id, t);
|
XMLApplicationProfile.ValidationResult res_F = profile.validate(id, t);
|
||||||
Map<String, Result> results = res_F.results();
|
Map<String, Result> results = res_F.results();
|
||||||
// int MaxScoreI2_01M_SPEC = (int) ((res_F.score()*getWeight())/100);
|
// int MaxScoreI2_01M_SPEC = (int) ((res_F.score()*getWeight())/100);
|
||||||
|
@ -564,9 +573,7 @@ class I2_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
return new StandardResult(ress.score(), ress.status(), (List<String>) ress.warnings(), (List<String>) ress.errors(), ress.internalError());
|
return new StandardResult(ress.score(), ress.status(), (List<String>) ress.warnings(), (List<String>) ress.errors(), ress.internalError());
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.println(e.getMessage());
|
logger.error("", e);
|
||||||
System.out.println(e);
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -604,6 +611,9 @@ class I2_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
|
|
||||||
class R1_01M_SPEC extends AbstractGuideline<Document> {
|
class R1_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(R1_01M_SPEC.class);
|
||||||
|
|
||||||
|
|
||||||
public R1_01M_SPEC() { super("Plurality of accurate and relevant attributes are provided to allow reuse", 3*4); }
|
public R1_01M_SPEC() { super("Plurality of accurate and relevant attributes are provided to allow reuse", 3*4); }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -637,9 +647,7 @@ class R1_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
return new StandardResult(ress.score(), ress.status(), (List<String>) ress.warnings(), (List<String>) ress.errors(), ress.internalError());
|
return new StandardResult(ress.score(), ress.status(), (List<String>) ress.warnings(), (List<String>) ress.errors(), ress.internalError());
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.println(e.getMessage());
|
logger.error("", e);
|
||||||
System.out.println(e);
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -677,6 +685,9 @@ class R1_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
|
|
||||||
class R1_2_01M_SPEC extends AbstractGuideline<Document> {
|
class R1_2_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(R1_2_01M_SPEC.class);
|
||||||
|
|
||||||
|
|
||||||
public R1_2_01M_SPEC() { super("Metadata includes provenance information according to a cross-community language", 2*5); }
|
public R1_2_01M_SPEC() { super("Metadata includes provenance information according to a cross-community language", 2*5); }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -711,9 +722,7 @@ class R1_2_01M_SPEC extends AbstractGuideline<Document> {
|
||||||
return new StandardResult(ress.score(), ress.status(), (List<String>) ress.warnings(), (List<String>) ress.errors(), ress.internalError());
|
return new StandardResult(ress.score(), ress.status(), (List<String>) ress.warnings(), (List<String>) ress.errors(), ress.internalError());
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.println(e.getMessage());
|
logger.error("", e);
|
||||||
System.out.println(e);
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ package eu.dnetlib.validator2.validation.utils;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -20,10 +21,10 @@ public class ISOLangCodes {
|
||||||
private static void loadLangCodes() {
|
private static void loadLangCodes() {
|
||||||
try (InputStream in = MediaTypes.class.getClassLoader().getResourceAsStream("iso639XLangCodes.csv")) {
|
try (InputStream in = MediaTypes.class.getClassLoader().getResourceAsStream("iso639XLangCodes.csv")) {
|
||||||
//TODO:Remove the regex
|
//TODO:Remove the regex
|
||||||
List<String> l = Arrays.asList(IOUtils.toString(in, "UTF-8").split("\\s*,\\s*"));
|
List<String> l = Arrays.asList(IOUtils.toString(in, StandardCharsets.UTF_8).split("\\s*,\\s*"));
|
||||||
langs = new HashSet<>(l);
|
langs = new HashSet<>(l);
|
||||||
}
|
}
|
||||||
catch (Exception e) {}
|
catch (Exception e) {} // We may get an NPE.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import eu.dnetlib.validator2.validation.XMLApplicationProfile;
|
||||||
import eu.dnetlib.validator2.validation.guideline.Guideline;
|
import eu.dnetlib.validator2.validation.guideline.Guideline;
|
||||||
import eu.dnetlib.validator2.validation.guideline.openaire.LiteratureGuidelinesV3Profile;
|
import eu.dnetlib.validator2.validation.guideline.openaire.LiteratureGuidelinesV3Profile;
|
||||||
import groovy.xml.DOMBuilder;
|
import groovy.xml.DOMBuilder;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
|
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
|
@ -13,6 +14,9 @@ import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class Test {
|
public class Test {
|
||||||
|
|
||||||
|
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Test.class);
|
||||||
|
|
||||||
|
|
||||||
private static final String[] FILES = new String[] {
|
private static final String[] FILES = new String[] {
|
||||||
// "src/test/resources/openaireguidelinesV3/dia.library.tuc.gr/Record_21811.xml",
|
// "src/test/resources/openaireguidelinesV3/dia.library.tuc.gr/Record_21811.xml",
|
||||||
// "src/test/resources/openaireguidelinesV3/cris.vtt.fi/01.xml",
|
// "src/test/resources/openaireguidelinesV3/cris.vtt.fi/01.xml",
|
||||||
|
@ -23,28 +27,26 @@ public class Test {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
// String xmlFile = args[0];
|
// String xmlFile = args[0];
|
||||||
LiteratureGuidelinesV3Profile profile = new LiteratureGuidelinesV3Profile();
|
LiteratureGuidelinesV3Profile profile = new LiteratureGuidelinesV3Profile();
|
||||||
System.out.println("Max score: " + profile.maxScore());
|
logger.info("Max score: " + profile.maxScore());
|
||||||
Map<String, Double> scorePerDoc = new LinkedHashMap<>();
|
Map<String, Double> scorePerDoc = new LinkedHashMap<>();
|
||||||
for (String file: FILES) {
|
for (String file: FILES) {
|
||||||
try {
|
try {
|
||||||
System.out.println("Processing \"" + file + "\"");
|
logger.info("Processing \"" + file + "\"");
|
||||||
Document doc = DOMBuilder.parse(new FileReader(file), false, true, true);
|
Document doc = DOMBuilder.parse(new FileReader(file), false, true, true);
|
||||||
XMLApplicationProfile.ValidationResult result = profile.validate(file, doc);
|
XMLApplicationProfile.ValidationResult result = profile.validate(file, doc);
|
||||||
scorePerDoc.put(file, result.score());
|
scorePerDoc.put(file, result.score());
|
||||||
Map<String, Guideline.Result> results = result.results();
|
Map<String, Guideline.Result> results = result.results();
|
||||||
for (Map.Entry entry : results.entrySet()) {
|
for (Map.Entry entry : results.entrySet()) {
|
||||||
System.out.println(entry.getKey() + " = " + entry.getValue());
|
logger.info(entry.getKey() + " = " + entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(Exception e) {
|
catch(Exception e) {
|
||||||
System.out.println(e.getMessage());
|
logger.error("", e);
|
||||||
System.out.println(e);
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String printout = scorePerDoc.entrySet().stream().
|
String printout = scorePerDoc.entrySet().stream().
|
||||||
map(entry -> entry.getValue() + ": " + entry.getKey()).collect(Collectors.joining("\n"));
|
map(entry -> entry.getValue() + ": " + entry.getKey()).collect(Collectors.joining("\n"));
|
||||||
System.out.println(printout);
|
logger.info(printout);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +1,23 @@
|
||||||
package eu.dnetlib.validator2.engine;
|
package eu.dnetlib.validator2.engine;
|
||||||
|
|
||||||
//import com.google.gson.Gson;
|
|
||||||
import eu.dnetlib.validator2.validation.XMLApplicationProfile;
|
import eu.dnetlib.validator2.validation.XMLApplicationProfile;
|
||||||
import eu.dnetlib.validator2.validation.guideline.Guideline;
|
import eu.dnetlib.validator2.validation.guideline.Guideline;
|
||||||
import eu.dnetlib.validator2.validation.guideline.StandardResult;
|
|
||||||
import eu.dnetlib.validator2.validation.guideline.openaire.FAIR_Data_GuidelinesProfile;
|
import eu.dnetlib.validator2.validation.guideline.openaire.FAIR_Data_GuidelinesProfile;
|
||||||
import groovy.xml.DOMBuilder;
|
import groovy.xml.DOMBuilder;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
|
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.OptionalDouble;
|
import java.util.OptionalDouble;
|
||||||
import java.util.StringJoiner;
|
|
||||||
import java.util.function.ToDoubleFunction;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.DoubleStream;
|
|
||||||
|
|
||||||
public class Test_FAIR {
|
public class Test_FAIR {
|
||||||
|
|
||||||
|
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Test_FAIR.class);
|
||||||
|
|
||||||
|
|
||||||
private static final String[] FILES = new String[]{
|
private static final String[] FILES = new String[]{
|
||||||
"src/test/resources/openaireguidelinesV3/dia.library.tuc.gr/Record_21811.xml",
|
"src/test/resources/openaireguidelinesV3/dia.library.tuc.gr/Record_21811.xml",
|
||||||
"src/test/resources/openaireguidelinesV3/cris.vtt.fi/03.xml",
|
"src/test/resources/openaireguidelinesV3/cris.vtt.fi/03.xml",
|
||||||
|
@ -32,27 +31,25 @@ public class Test_FAIR {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
// String xmlFile = args[0];
|
// String xmlFile = args[0];
|
||||||
FAIR_Data_GuidelinesProfile profile = new FAIR_Data_GuidelinesProfile();
|
FAIR_Data_GuidelinesProfile profile = new FAIR_Data_GuidelinesProfile();
|
||||||
System.out.println("Max score: " + profile.maxScore());
|
logger.info("Max score: " + profile.maxScore());
|
||||||
Map<String, Double> scorePerDoc = new LinkedHashMap<>();
|
Map<String, Double> scorePerDoc = new LinkedHashMap<>();
|
||||||
int i = 1;
|
int i = 1;
|
||||||
for (String file : FILES) {
|
for (String file : FILES) {
|
||||||
try {
|
try {
|
||||||
System.out.println("Processing \"" + file + "\"");
|
logger.info("Processing \"" + file + "\"");
|
||||||
Document doc = DOMBuilder.parse(new FileReader(file), false, true, true);
|
Document doc = DOMBuilder.parse(new FileReader(file), false, true, true);
|
||||||
XMLApplicationProfile.ValidationResult result = profile.validate(file, doc);
|
XMLApplicationProfile.ValidationResult result = profile.validate(file, doc);
|
||||||
scorePerDoc.put(file, result.score());
|
scorePerDoc.put(file, result.score());
|
||||||
Map<String, Guideline.Result> results = result.results();
|
Map<String, Guideline.Result> results = result.results();
|
||||||
// for (Map.Entry entry : results.entrySet()) {
|
|
||||||
// System.out.println(entry.getKey() + " = " + entry.getValue());
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
if ( logger.isDebugEnabled() ) {
|
||||||
} catch (Exception e) {
|
for ( Map.Entry entry : results.entrySet() ) {
|
||||||
System.out.println(e.getMessage());
|
logger.debug(entry.getKey() + " = " + entry.getValue());
|
||||||
System.out.println(e);
|
}
|
||||||
e.printStackTrace();
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("", e);
|
||||||
}
|
}
|
||||||
// System.out.println("\n\n\n\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Individual scores
|
// Individual scores
|
||||||
|
@ -60,13 +57,11 @@ public class Test_FAIR {
|
||||||
map(entry -> entry.getValue() + ": " + entry.getKey()).collect(Collectors.joining("\n"));
|
map(entry -> entry.getValue() + ": " + entry.getKey()).collect(Collectors.joining("\n"));
|
||||||
|
|
||||||
// Average Score
|
// Average Score
|
||||||
double FinalScore = scorePerDoc.entrySet().stream().mapToDouble(entry -> entry.getValue()).average().getAsDouble();
|
OptionalDouble optionalFinalScore = scorePerDoc.values().stream().mapToDouble(aDouble -> aDouble).average();
|
||||||
|
double finalScore = (optionalFinalScore.isPresent() ? optionalFinalScore.getAsDouble() : -1 );
|
||||||
|
|
||||||
System.out.println(printout);
|
|
||||||
System.out.println("\nValidation Score: "+FinalScore);
|
|
||||||
// TotalScore.forEach(System.out::println);
|
|
||||||
|
|
||||||
|
logger.info(printout);
|
||||||
|
logger.info("\nValidation Score: " + finalScore);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,17 +2,23 @@ package eu.dnetlib.validator2.engine;
|
||||||
|
|
||||||
import eu.dnetlib.validator2.validation.XMLApplicationProfile;
|
import eu.dnetlib.validator2.validation.XMLApplicationProfile;
|
||||||
import eu.dnetlib.validator2.validation.guideline.Guideline;
|
import eu.dnetlib.validator2.validation.guideline.Guideline;
|
||||||
|
import eu.dnetlib.validator2.validation.guideline.openaire.AbstractOpenAireProfile;
|
||||||
import eu.dnetlib.validator2.validation.guideline.openaire.LiteratureGuidelinesV4Profile;
|
import eu.dnetlib.validator2.validation.guideline.openaire.LiteratureGuidelinesV4Profile;
|
||||||
import groovy.xml.DOMBuilder;
|
import groovy.xml.DOMBuilder;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
|
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.OptionalDouble;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class Test_v4 {
|
public class Test_v4 {
|
||||||
|
|
||||||
|
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Test_v4.class);
|
||||||
|
|
||||||
|
|
||||||
private static final String[] FILES = new String[] {
|
private static final String[] FILES = new String[] {
|
||||||
"src/test/resources/openaireguidelinesV4/v4_literature_all_invalid_guidelines_record.xml",
|
"src/test/resources/openaireguidelinesV4/v4_literature_all_invalid_guidelines_record.xml",
|
||||||
// "src/test/resources/openaireguidelinesV4/v4_literature_all_guidelines_record.xml",
|
// "src/test/resources/openaireguidelinesV4/v4_literature_all_guidelines_record.xml",
|
||||||
|
@ -22,41 +28,40 @@ public class Test_v4 {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
// String xmlFile = args[0];
|
// String xmlFile = args[0];
|
||||||
LiteratureGuidelinesV4Profile profile = new LiteratureGuidelinesV4Profile();
|
AbstractOpenAireProfile profile = new LiteratureGuidelinesV4Profile();
|
||||||
System.out.println("Max score: " + profile.maxScore());
|
logger.info("Max score: " + profile.maxScore());
|
||||||
Map<String, Double> scorePerDoc = new LinkedHashMap<>();
|
Map<String, Double> scorePerDoc = new LinkedHashMap<>();
|
||||||
for (String file: FILES) {
|
for (String file: FILES) {
|
||||||
try {
|
try {
|
||||||
System.out.println("Processing \"" + file + "\"");
|
logger.info("Processing \"" + file + "\"");
|
||||||
Document doc = DOMBuilder.parse(new FileReader(file), false, true, true);
|
Document doc = DOMBuilder.parse(new FileReader(file), false, true, true);
|
||||||
XMLApplicationProfile.ValidationResult result = profile.validate(file, doc);
|
XMLApplicationProfile.ValidationResult result = profile.validate(file, doc);
|
||||||
scorePerDoc.put(file, result.score());
|
scorePerDoc.put(file, result.score());
|
||||||
Map<String, Guideline.Result> results = result.results();
|
Map<String, Guideline.Result> results = result.results();
|
||||||
for (Map.Entry entry : results.entrySet()) {
|
for (Map.Entry entry : results.entrySet()) {
|
||||||
if (entry.getKey().toString().contains("Date")) {
|
if (entry.getKey().toString().contains("Date")) {
|
||||||
System.out.println(results.get(entry.getKey()).warnings().toString());
|
logger.info("Warnings: " + results.get(entry.getKey()).warnings().toString());
|
||||||
System.out.println(results.get(entry.getKey()).errors().toString());
|
logger.info("Errors: " + results.get(entry.getKey()).errors().toString());
|
||||||
System.out.println(entry.getKey() + " = " + entry.getValue());
|
logger.info("Result: " + entry.getKey() + " = " + entry.getValue() + "\n");
|
||||||
System.out.println("\n");
|
|
||||||
}
|
}
|
||||||
// System.out.println(entry.getKey() + " = " + entry.getValue());
|
logger.debug(entry.getKey() + " = " + entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(Exception e) {
|
catch(Exception e) {
|
||||||
System.out.println(e.getMessage());
|
logger.error(e.getMessage());
|
||||||
System.out.println(e);
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Individual scores
|
// Individual scores
|
||||||
String printout = scorePerDoc.entrySet().stream().
|
String printout = scorePerDoc.entrySet().stream().
|
||||||
map(entry -> entry.getValue() + ": " + entry.getKey()).collect(Collectors.joining("\n"));
|
map(entry -> entry.getValue() + ": " + entry.getKey()).collect(Collectors.joining("\n"));
|
||||||
|
|
||||||
// Average Score
|
// Average Score
|
||||||
double FinalScore = scorePerDoc.entrySet().stream().mapToDouble(entry -> entry.getValue()).average().getAsDouble();
|
OptionalDouble optionalFinalScore = scorePerDoc.values().stream().mapToDouble(aDouble -> aDouble).average();
|
||||||
|
double finalScore = (optionalFinalScore.isPresent() ? optionalFinalScore.getAsDouble() : -1 );
|
||||||
System.out.println(printout);
|
|
||||||
System.out.println("\nValidation Score: "+FinalScore);
|
|
||||||
|
|
||||||
|
logger.info(printout);
|
||||||
|
logger.info("\nValidation Score: " + finalScore);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
status = error
|
|
||||||
dest = err
|
|
||||||
name = PropertiesConfig
|
|
||||||
|
|
||||||
property.filename = target/validator_testing.log
|
|
||||||
|
|
||||||
|
|
||||||
appender.rolling.type = RollingFile
|
|
||||||
appender.rolling.name = RollingFile
|
|
||||||
appender.rolling.fileName = ${filename}
|
|
||||||
appender.rolling.filePattern = target/validator_testing -%d{MM-dd-yy-HH-mm-ss}-%i.log.gz
|
|
||||||
appender.rolling.layout.type = PatternLayout
|
|
||||||
appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n
|
|
||||||
appender.rolling.policies.type = Policies
|
|
||||||
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
|
|
||||||
appender.rolling.policies.time.interval = 2
|
|
||||||
appender.rolling.policies.time.modulate = true
|
|
||||||
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
|
|
||||||
appender.rolling.policies.size.size=100MB
|
|
||||||
appender.rolling.strategy.type = DefaultRolloverStrategy
|
|
||||||
appender.rolling.strategy.max = 5
|
|
||||||
|
|
||||||
logger.rolling.name = eu.dnetlib.validator2
|
|
||||||
logger.rolling.additivity = false
|
|
||||||
logger.rolling.appenderRef.rolling.ref = RollingFile
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
<configuration debug="false">
|
||||||
|
|
||||||
|
<shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> <!-- Default delay: 0ms (zero) -->
|
||||||
|
|
||||||
|
<!-- <Appenders>-->
|
||||||
|
<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<file>logs/ValidationEngine.log</file>
|
||||||
|
|
||||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
|
||||||
|
<fileNamePattern>logs/ValidationEngine.%i.log.zip</fileNamePattern>
|
||||||
|
<minIndex>1</minIndex>
|
||||||
|
<maxIndex>20</maxIndex>
|
||||||
|
</rollingPolicy>
|
||||||
|
|
||||||
|
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
|
||||||
|
<maxFileSize>50MB</maxFileSize> <!-- Lower the size to check the "RollingFileAppender" during tests. -->
|
||||||
|
</triggeringPolicy>
|
||||||
|
<encoder>
|
||||||
|
<charset>UTF-8</charset>
|
||||||
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS z} [%thread] %-5level %logger{36}.%M\(@%line\) - %msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<charset>UTF-8</charset>
|
||||||
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS z} [%thread] %highlight(%-5level) %cyan(%logger{36}.%M\(@%line\)) - %msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
<!-- </Appenders>-->
|
||||||
|
|
||||||
|
<!-- <Loggers>-->
|
||||||
|
<root level="debug">
|
||||||
|
<appender-ref ref="Console" />
|
||||||
|
</root>
|
||||||
|
|
||||||
|
<logger name="eu.dnetlib.validator2" level="trace"/>
|
||||||
|
|
||||||
|
<!-- </Loggers>-->
|
||||||
|
|
||||||
|
</configuration>
|
Loading…
Reference in New Issue