From e5cd36f869e9b8a7bb9caae5d2ab5d6d09632f8f Mon Sep 17 00:00:00 2001 From: LSmyrnaios Date: Fri, 8 Sep 2023 15:42:56 +0300 Subject: [PATCH] Separate warn-log-messages depending on the "requirementLevel" of each rule. --- .../guideline/GuidelineEvaluation.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/GuidelineEvaluation.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/GuidelineEvaluation.java index 6419c46..e91cf5b 100644 --- a/src/main/java/eu/dnetlib/validator2/validation/guideline/GuidelineEvaluation.java +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/GuidelineEvaluation.java @@ -58,16 +58,21 @@ class GuidelineEvaluation { } String id = rule.getContext().getIdProperty().getValue(); + RequirementLevel requirementLevel = getRequirementLevelOf(id); - if ( status == Status.SUCCESS && getRequirementLevelOf(id) == RequirementLevel.NOT_APPLICABLE ) { + if ( status == Status.SUCCESS + && (requirementLevel == RequirementLevel.NOT_APPLICABLE) ) { // Report the non-applicability of a rule as a warning // The check for both status and non-applicable requirement level is redundant // (non-applicable rules always succeed), yet it is more clear, hopefully. logger.warn("Non-applicable: " + rule); warnings.add(synthesizeFailureMessage(rule)); } - else if ( status == Status.FAILURE ) { - if ( getRequirementLevelOf(id) == RequirementLevel.MANDATORY ) { + else if ( status == Status.FAILURE ) + { + if ( requirementLevel == RequirementLevel.MANDATORY + || requirementLevel == RequirementLevel.MANDATORY_IF_APPLICABLE ) + { // A mandatory rule has failed, yet we don't know whether we should report is as such. // Let's check the parent of the rule @@ -83,17 +88,28 @@ class GuidelineEvaluation { // (a) is non-mandatory or // (b) it was successful. // Thus, here we need only to warn and not to err, allowing the evaluation loop to proceed. - logger.warn("Mandatory failure: " + rule); + if ( requirementLevel == RequirementLevel.MANDATORY ) + logger.warn("Mandatory failure: " + rule); + else + logger.warn("Mandatory_If_Applicable failure: " + rule); + warnings.add(synthesizeFailureMessage(rule)); } } else { // This is a warning: a non-mandatory rule has failed. // Note that MA rules are treated as non-mandatory. // We let the evaluation loop proceed. - logger.warn("Optional/Recommended failure: " + rule); + if ( requirementLevel == RequirementLevel.RECOMMENDED ) + logger.warn("Recommended failure: " + rule); + else if ( requirementLevel == RequirementLevel.OPTIONAL ) + logger.warn("Optional failure: " + rule); + else // This should never happen, but better catch this case, than leave it be. + logger.error("UNKNOWN failure: " + rule); // It is not "Mandatory", in any form, though. + warnings.add(synthesizeFailureMessage(rule)); } } + // Else it is just "SUCCESS" for an applicable rule, which means there is no error or warning to create. } int returnedWeight = weight;