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

pkiraly / metadata-qa-api / #742

14 Jan 2026 12:45PM UTC coverage: 85.581% (-0.6%) from 86.157%
#742

push

pkiraly
Add parent check

32 of 96 new or added lines in 7 files covered. (33.33%)

2 existing lines in 2 files now uncovered.

5686 of 6644 relevant lines covered (85.58%)

0.86 hits per line

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

55.93
/src/main/java/de/gwdg/metadataqa/api/rule/logical/NotChecker.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.ArrayList;
15
import java.util.List;
16
import java.util.Map;
17
import java.util.logging.Logger;
18

19
public class NotChecker extends LogicalChecker {
20

21
  private static final long serialVersionUID = -1304107444331551638L;
22
  public static final String PREFIX = "not";
23

24
  private static final Logger LOGGER = Logger.getLogger(NotChecker.class.getCanonicalName());
1✔
25

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

34
  public NotChecker(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
    update(selector, results, outputType, null);
1✔
42
  }
1✔
43

44
  public void update(Selector selector,
45
                     FieldCounter<RuleCheckerOutput> results,
46
                     RuleCheckingOutputType outputType,
47
                     FieldCounter<RuleCheckerOutput> globalResults) {
48
    if (isDebug())
1✔
49
      LOGGER.info(this.getClass().getSimpleName() + " " + this.id);
×
50

51
    if (globalResults == null) {
1✔
52
      globalResults = results;
1✔
53
    }
54

55
    var allPassed = true;
1✔
56
    var isNA = false;
1✔
57
    RuleCheckerOutput output = null;
1✔
58
    List<RuleCheckingOutputStatus> statuses = new ArrayList<>();
1✔
59

60
    List<XmlFieldInstance> instances = selector.get(field);
1✔
61
    if (instances != null && !instances.isEmpty()) {
1✔
62
      FieldCounter<RuleCheckerOutput> localResults = new FieldCounter<>();
1✔
63
      for (RuleChecker checker : checkers) {
1✔
64
        if (checker instanceof DependencyChecker)
1✔
65
          ((DependencyChecker)checker).update(selector, localResults, outputType, globalResults);
×
66
        else
67
          checker.update(selector, localResults, outputType);
1✔
68
        String key = outputType.equals(RuleCheckingOutputType.BOTH) ? checker.getIdOrHeader(RuleCheckingOutputType.SCORE) : checker.getIdOrHeader();
1✔
69
        if (localResults.get(key).getStatus().equals(RuleCheckingOutputStatus.PASSED)) {
1✔
70
          allPassed = false;
1✔
71
          break;
1✔
72
        }
73
      }
1✔
74
    } else {
1✔
NEW
75
      LOGGER.info("no instance. alwaysCheckDependencies: " + alwaysCheckDependencies);
×
UNCOV
76
      isNA = true;
×
NEW
77
      for (RuleChecker checker : checkers) {
×
NEW
78
        if (checker instanceof MinCountChecker) {
×
NEW
79
          MinCountChecker minCountChecker = (MinCountChecker) checker;
×
NEW
80
          if (!minCountChecker.isEmptyInstancesAllowed() || minCountChecker.getMinCount() > 0)
×
NEW
81
            allPassed = false;
×
NEW
82
        }
×
NEW
83
        else if (alwaysCheckDependencies && checker instanceof DependencyChecker) {
×
NEW
84
          DependencyChecker dependencyChecker = (DependencyChecker) checker;
×
NEW
85
          Map<String, Boolean> localResult = dependencyChecker.getResult(outputType, results);
×
NEW
86
          boolean dependenciesPassed = localResult.get("allPassed");
×
NEW
87
          LOGGER.info("dependenciesPassed: " + dependenciesPassed);
×
NEW
88
          isNA = false;
×
NEW
89
          if (dependenciesPassed) {
×
NEW
90
            allPassed = false;
×
NEW
91
            break;
×
92
          }
93
          /*
94
          var localIsNA = localResult.get("isNA");
95
          LOGGER.info("dependenciesPassed: " + dependenciesPassed);
96
          LOGGER.info("localIsNA: " + localIsNA);
97
          if (localIsNA) {
98
            output = new RuleCheckerOutput(this, RuleCheckingOutputStatus.NA);
99
          } else {
100
            if (dependenciesPassed)
101
              output = new RuleCheckerOutput(this, RuleCheckingOutputStatus.PASSED);
102
            else
103
              output = new RuleCheckerOutput(this, RuleCheckingOutputStatus.FAILED);
104
          }
105
          statuses.add(output.getStatus());
106
           */
107
        }
NEW
108
      }
×
NEW
109
      LOGGER.info("statuses: " + statuses);
×
NEW
110
      LOGGER.info("output: " + output);
×
NEW
111
      LOGGER.info("allPassed: " + allPassed);
×
NEW
112
      LOGGER.info("isNA: " + isNA);
×
113
    }
114

115
    if (priorityOnFail) {
1✔
116
      /*
117
      output = null;
118
      allPassed = statuses.contains(RuleCheckingOutputStatus.PASSED);
119
      if (!statuses.isEmpty()
120
        && !containsOnlyNAs(statuses)
121
        && (!allPassed || statuses.contains(RuleCheckingOutputStatus.PASSED)))
122
        isNA = false;
123

124
       */
125
    }
126

127
    if (output != null) {
1✔
NEW
128
      addOutput(results, output, outputType);
×
129
    } else {
130
      addOutput(results, isNA, allPassed, outputType);
1✔
131
    }
132
    LOGGER.info("results: " + results);
1✔
133

134
    if (isDebug())
1✔
135
      LOGGER.info(this.getClass().getSimpleName() + " " + this.id + ") result: " + RuleCheckingOutputStatus.create(isNA, allPassed, isMandatory()));
×
136
  }
1✔
137
}
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