• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pkiraly / metadata-qa-api / #649

10 Apr 2025 10:43AM UTC coverage: 87.139% (-0.01%) from 87.153%
#649

push

pkiraly
Or checker failes if a mandatory dependency fails

0 of 1 new or added line in 1 file covered. (0.0%)

5468 of 6275 relevant lines covered (87.14%)

0.87 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

54.9
/src/main/java/de/gwdg/metadataqa/api/rule/logical/OrChecker.java
1
package de.gwdg.metadataqa.api.rule.logical;
2

3
import de.gwdg.metadataqa.api.counter.FieldCounter;
4
import de.gwdg.metadataqa.api.json.DataElement;
5
import de.gwdg.metadataqa.api.model.XmlFieldInstance;
6
import de.gwdg.metadataqa.api.model.selector.Selector;
7
import de.gwdg.metadataqa.api.rule.RuleChecker;
8
import de.gwdg.metadataqa.api.rule.RuleCheckerOutput;
9
import de.gwdg.metadataqa.api.rule.RuleCheckingOutputStatus;
10
import de.gwdg.metadataqa.api.rule.RuleCheckingOutputType;
11
import de.gwdg.metadataqa.api.rule.singlefieldchecker.DependencyChecker;
12
import de.gwdg.metadataqa.api.rule.singlefieldchecker.MinCountChecker;
13

14
import java.util.List;
15
import java.util.logging.Logger;
16

17
public class OrChecker extends LogicalChecker {
18

19
  private static final Logger LOGGER = Logger.getLogger(OrChecker.class.getCanonicalName());
1✔
20

21
  private static final long serialVersionUID = 1114999259831619599L;
22
  public static final String PREFIX = "or";
23

24
  /**
25
   * @param field The field
26
   * @param checkers The list of checkers
27
   */
28
  public OrChecker(DataElement field, List<RuleChecker> checkers) {
29
    this(field, field.getLabel(), checkers);
1✔
30
  }
1✔
31

32
  public OrChecker(DataElement field, String header, List<RuleChecker> checkers) {
33
    super(field, header + ":" + PREFIX + ":" + getChildrenHeader(checkers));
1✔
34
    this.checkers = checkers;
1✔
35
  }
1✔
36

37
  @Override
38
  public void update(Selector cache, FieldCounter<RuleCheckerOutput> results, RuleCheckingOutputType outputType) {
39
    if (isDebug())
1✔
40
      LOGGER.info(this.getClass().getSimpleName() + " " + this.id);
×
41

42
    // if NA and dependency checker FAILED -> FAILED
43
    var allPassed = false;
1✔
44
    var isNA = false;
1✔
45
    RuleCheckerOutput output = null;
1✔
46
    List<XmlFieldInstance> instances = cache.get(field);
1✔
47
    if (instances != null && !instances.isEmpty()) {
1✔
48
      FieldCounter<RuleCheckerOutput> localResults = new FieldCounter<>();
1✔
49
      for (RuleChecker checker : checkers) {
1✔
50
        if (checker instanceof DependencyChecker) {
1✔
51
          ((DependencyChecker) checker).update(cache, localResults, outputType, results);
×
52
        } else {
53
          checker.update(cache, localResults, outputType);
1✔
54
        }
55
        String key = outputType.equals(RuleCheckingOutputType.BOTH)
1✔
56
                   ? checker.getIdOrHeader(RuleCheckingOutputType.SCORE)
1✔
57
                   : checker.getIdOrHeader();
1✔
58
        if (localResults.get(key).getStatus().equals(RuleCheckingOutputStatus.PASSED)) {
1✔
59
          allPassed = true;
1✔
60
          break;
1✔
61
        }
62
      }
1✔
63
    } else {
1✔
64
      isNA = true;
×
65
      for (RuleChecker checker : checkers) {
×
66
        if (checker instanceof MinCountChecker) {
×
67
          MinCountChecker minCountChecker = (MinCountChecker) checker;
×
68
          if (!minCountChecker.isEmptyInstancesAllowed() || minCountChecker.getMinCount() > 0)
×
69
            allPassed = false;
×
70
        }
×
71
        else if (alwaysCheckDependencies && checker instanceof DependencyChecker) {
×
72
          DependencyChecker dependencyChecker = (DependencyChecker) checker;
×
73
          boolean dependenciesPassed = dependencyChecker.getResult(outputType, results);
×
74
          if (dependenciesPassed == false)
×
75
            output = new RuleCheckerOutput(this, RuleCheckingOutputStatus.FAILED);
×
76
          else
NEW
77
            output = new RuleCheckerOutput(this, RuleCheckingOutputStatus.PASSED);
×
78
        }
79

80
        if (!allPassed)
×
81
          break;
×
82
      }
×
83
    }
84
    if (output != null) {
1✔
85
      addOutput(results, output, outputType);
×
86
    } else {
87
      addOutput(results, isNA, allPassed, outputType);
1✔
88
    }
89
    if (isDebug()) {
1✔
90
      RuleCheckingOutputStatus status = output != null
×
91
        ? output.getStatus()
×
92
        : RuleCheckingOutputStatus.create(isNA, allPassed, isMandatory());
×
93
      LOGGER.info(String.format("%s %s) isNA: %s, allPassed: %s, result: %s", this.getClass().getSimpleName(), this.id, isNA, allPassed, status));
×
94
    }
95
  }
1✔
96
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc