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

pkiraly / metadata-qa-api / #718

03 Sep 2025 03:11PM UTC coverage: 86.439% (+0.01%) from 86.426%
#718

push

pkiraly
Fixing has children checker

15 of 16 new or added lines in 1 file covered. (93.75%)

1 existing line in 1 file now uncovered.

5660 of 6548 relevant lines covered (86.44%)

0.86 hits per line

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

94.44
/src/main/java/de/gwdg/metadataqa/api/rule/singlefieldchecker/HasChildrenChecker.java
1
package de.gwdg.metadataqa.api.rule.singlefieldchecker;
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.model.selector.XmlSelector;
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 org.w3c.dom.Node;
12

13
import javax.xml.transform.OutputKeys;
14
import javax.xml.transform.Transformer;
15
import javax.xml.transform.TransformerException;
16
import javax.xml.transform.TransformerFactory;
17
import javax.xml.transform.dom.DOMSource;
18
import javax.xml.transform.stream.StreamResult;
19
import java.io.StringWriter;
20
import java.util.List;
21
import java.util.logging.Logger;
22

23
public class HasChildrenChecker extends SingleFieldChecker {
24

25
  private static final long serialVersionUID = 1114999259831619599L;
26
  public static final String PREFIX = "hasValue";
27
  protected List<String> children;
28

29
  private static final Logger LOGGER = Logger.getLogger(HasChildrenChecker.class.getCanonicalName());
1✔
30

31
  /**
32
   * @param field The field
33
   * @param children The list of children (XPath)
34
   */
35
  public HasChildrenChecker(DataElement field, List<String> children) {
36
    this(field, field.getLabel(), children);
1✔
37
  }
1✔
38

39
  public HasChildrenChecker(DataElement field, String header, List<String> children) {
40
    super(field, header + ":" + PREFIX);
1✔
41
    this.children = children;
1✔
42
  }
1✔
43

44
  @Override
45
  public void update(Selector selector,
46
                     FieldCounter<RuleCheckerOutput> results,
47
                     RuleCheckingOutputType outputType) {
48
    if (isDebug())
1✔
49
      LOGGER.info(String.format("%s %s, field: %s, path(s): %s, children: %s, scope: %s", this.getClass().getSimpleName(), this.id, field.getLabel(), field.getPath(), children, getScope()));
1✔
50

51
    var isNA = true;
1✔
52
    int passCount = 0;
1✔
53
    boolean hasFailed = false;
1✔
54
    if (selector.getClass().equals(XmlSelector.class)) {
1✔
55
      List<Node> nodes = (List<Node>) selector.getFragment(field.getPath());
1✔
56
      if (!nodes.isEmpty()) {
1✔
57
        isNA = false;
1✔
58
        int i = 0;
1✔
59
        for (Node node : nodes) {
1✔
60
          boolean hasAllChildren = true;
1✔
61
          for (String childPath : children) {
1✔
62
            List values = selector.get(childPath + Math.random(), childPath, node);
1✔
63
            if (values.isEmpty()) {
1✔
64
              hasFailed = true;
1✔
65
              hasAllChildren = false;
1✔
66
              if (scopeIsAllOf())
1✔
NEW
67
                break;
×
68
            }
69
          } // children
1✔
70
          if (hasAllChildren)
1✔
71
            passCount++;
1✔
72
          else  if (scopeIsAllOf())
1✔
UNCOV
73
            break;
×
74
        } // nodes
1✔
75
      }
76
    }
77
    boolean allPassed = isPassed(passCount, hasFailed);
1✔
78
    addOutput(results, isNA, allPassed, outputType);
1✔
79
    if (isDebug())
1✔
80
      LOGGER.info(this.getClass().getSimpleName() + " " + this.id + ") result: " + RuleCheckingOutputStatus.create(isNA, allPassed, isMandatory()));
1✔
81
  }
1✔
82

83
}
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