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

pkiraly / metadata-qa-api / #697

25 Jun 2025 12:18PM UTC coverage: 86.623% (-0.05%) from 86.677%
#697

push

pkiraly
Merge branch 'main' of github.com:pkiraly/metadata-qa-api

5608 of 6474 relevant lines covered (86.62%)

0.87 hits per line

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

43.08
/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.Map;
16
import java.util.HashMap;
17
import java.util.logging.Logger;
18

19
public class OrChecker extends LogicalChecker {
20

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

23
  private static final long serialVersionUID = 1114999259831619599L;
24
  public static final String PREFIX = "or";
25

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

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

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

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

88
        if (!allPassed)
×
89
          break;
×
90
      }
×
91
    }
92
    if (output != null) {
1✔
93
      addOutput(results, output, outputType);
×
94
    } else {
95
      addOutput(results, isNA, allPassed, outputType);
1✔
96
    }
97
    if (isDebug()) {
1✔
98
      RuleCheckingOutputStatus status = output != null
×
99
        ? output.getStatus()
×
100
        : RuleCheckingOutputStatus.create(isNA, allPassed, isMandatory());
×
101
      LOGGER.info(String.format("%s %s) isNA: %s, allPassed: %s, result: %s",
×
102
        this.getClass().getSimpleName(), this.id, isNA, allPassed, status));
×
103
    }
104
  }
1✔
105

106
  public Map<RuleCheckingOutputType, Object> getResult(RuleCheckingOutputType outputType,
107
                                                       FieldCounter<RuleCheckerOutput> globalResults) {
108
    Map<RuleCheckingOutputType, Object> result = new HashMap();
×
109
    if (outputType.equals(RuleCheckingOutputType.STATUS)) {
×
110
      result.put(RuleCheckingOutputType.STATUS, globalResults.get(getIdOrHeader()));
×
111
    } else if (outputType.equals(RuleCheckingOutputType.SCORE)) {
×
112
      result.put(RuleCheckingOutputType.SCORE, globalResults.get(getIdOrHeader()));
×
113
    } else if (outputType.equals(RuleCheckingOutputType.BOTH)) {
×
114
      result.put(RuleCheckingOutputType.STATUS, globalResults.get(getIdOrHeader() + ":status"));
×
115
      result.put(RuleCheckingOutputType.SCORE, globalResults.get(getIdOrHeader() + ":score"));
×
116
    }
117
    return result;
×
118
  }
119
}
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