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

pkiraly / metadata-qa-api / #692

04 Jun 2025 11:56AM UTC coverage: 86.93% (-0.3%) from 87.231%
#692

push

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

5547 of 6381 relevant lines covered (86.93%)

0.87 hits per line

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

61.43
/src/main/java/de/gwdg/metadataqa/api/rule/logical/AndChecker.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
import de.gwdg.metadataqa.api.rule.logical.OrChecker;
14

15
import java.util.List;
16
import java.util.Map;
17

18
public class AndChecker extends LogicalChecker {
19

20
  private static final long serialVersionUID = 1114999259831619599L;
21
  public static final String PREFIX = "and";
22

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

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

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

41
    var allPassed = true;
1✔
42
    var isNA = false;
1✔
43
    List<XmlFieldInstance> instances = selector.get(field);
1✔
44
    if (instances != null && !instances.isEmpty()) {
1✔
45
      FieldCounter<RuleCheckerOutput> localResults = new FieldCounter<>();
1✔
46
      for (RuleChecker checker : checkers) {
1✔
47
        if (checker instanceof DependencyChecker)
1✔
48
          ((DependencyChecker)checker).update(selector, localResults, outputType, results);
1✔
49
        else
50
          checker.update(selector, localResults, outputType);
1✔
51
        String key = outputType.equals(RuleCheckingOutputType.BOTH) ? checker.getIdOrHeader(RuleCheckingOutputType.SCORE) : checker.getIdOrHeader();
1✔
52
        RuleCheckingOutputStatus status = localResults.get(key).getStatus();
1✔
53
        if (status.equals(RuleCheckingOutputStatus.NA))
1✔
54
          isNA = true;
×
55
        if (!status.equals(RuleCheckingOutputStatus.PASSED)) {
1✔
56
          allPassed = false;
1✔
57
          break;
1✔
58
        }
59
      }
1✔
60
    } else {
1✔
61
      if (isDebug())
1✔
62
        LOGGER.info("empty branch");
×
63
      isNA = true;
1✔
64
      for (RuleChecker checker : checkers) {
1✔
65
        if (checker instanceof MinCountChecker) {
1✔
66
          if (isDebug())
1✔
67
            LOGGER.info("check MinCountChecker");
×
68
          MinCountChecker minCountChecker = (MinCountChecker) checker;
1✔
69
          if (!minCountChecker.isEmptyInstancesAllowed() || minCountChecker.getMinCount() > 0)
1✔
70
            allPassed = false;
1✔
71
        }
1✔
72
        else if (alwaysCheckDependencies) {
1✔
73
          if (isDebug())
×
74
            LOGGER.info("check DependencyChecker");
×
75
          if (checker instanceof DependencyChecker) {
×
76
            DependencyChecker dependencyChecker = (DependencyChecker) checker;
×
77
            Map<String, Boolean> result = dependencyChecker.getResult(outputType, results);
×
78
            if (isDebug())
×
79
              LOGGER.info("DependencyChecker result: " + result);
×
80
            allPassed = result.get("allPassed");
×
81
            isNA = result.get("isNA");
×
82
          } else if (checker instanceof OrChecker) {
×
83
            OrChecker orChecker = (OrChecker) checker;
×
84
            boolean hasDependency = false;
×
85
            for (RuleChecker current : orChecker.getCheckers()) {
×
86
              if (current instanceof DependencyChecker) {
×
87
                hasDependency = true;
×
88
                break;
×
89
              }
90
            }
×
91
            if (hasDependency) {
×
92
              orChecker.update(selector, results, outputType);
×
93
              Map<RuleCheckingOutputType, Object> orResult = orChecker.getResult(outputType, results);
×
94
              RuleCheckerOutput orStatus = (RuleCheckerOutput) orResult.get(RuleCheckingOutputType.STATUS);
×
95
              if (orStatus.getStatus().equals(RuleCheckingOutputStatus.FAILED)) {
×
96
                allPassed = false;
×
97
                isNA = false;
×
98
              }
99
            }
100
          }
101
        }
102

103
        if (!allPassed)
1✔
104
          break;
1✔
105
      }
1✔
106
    }
107
    if (isDebug())
1✔
108
      LOGGER.info(String.format("isNA: %s, allPassed: %s", isNA, allPassed));
1✔
109
    addOutput(results, isNA, allPassed, outputType);
1✔
110

111
    if (isDebug())
1✔
112
      LOGGER.info(this.getClass().getSimpleName() + " " + this.id + ") result: " + RuleCheckingOutputStatus.create(isNA, allPassed, isMandatory()));
1✔
113
  }
1✔
114
}
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