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

pkiraly / metadata-qa-api / #628

12 Feb 2025 08:29AM UTC coverage: 87.722% (+0.02%) from 87.702%
#628

push

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

5337 of 6084 relevant lines covered (87.72%)

0.88 hits per line

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

96.23
/src/main/java/de/gwdg/metadataqa/api/util/SchemaFactory.java
1
package de.gwdg.metadataqa.api.util;
2

3
import de.gwdg.metadataqa.api.configuration.SchemaConfiguration;
4
import de.gwdg.metadataqa.api.configuration.schema.Field;
5
import de.gwdg.metadataqa.api.configuration.schema.Group;
6
import de.gwdg.metadataqa.api.configuration.schema.Rule;
7
import de.gwdg.metadataqa.api.json.DataElement;
8
import de.gwdg.metadataqa.api.json.FieldGroup;
9
import de.gwdg.metadataqa.api.schema.BaseSchema;
10
import de.gwdg.metadataqa.api.schema.Format;
11
import de.gwdg.metadataqa.api.schema.Schema;
12
import org.apache.commons.lang3.StringUtils;
13

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

18
public class SchemaFactory {
19

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

22
  private SchemaFactory() {}
23

24
  public static Schema fromConfig(SchemaConfiguration config) {
25
    BaseSchema schema = new BaseSchema()
1✔
26
      .setFormat(Format.valueOf(config.getFormat().toUpperCase()));
1✔
27

28
    boolean hasCategories = config.hasCategories();
1✔
29
    if (hasCategories)
1✔
30
      schema.setCategories(config.getCategories());
1✔
31

32
    // containers used for checking duplicates
33
    List<String> names = new ArrayList<>();
1✔
34
    List<String> ruleIds = new ArrayList<>();
1✔
35

36
    for (Field field : config.getFields()) {
1✔
37
      String name = field.getName();
1✔
38
      if (names.contains(name))
1✔
39
        LOGGER.warning("Duplicate field name: " + name);
1✔
40
      names.add(name);
1✔
41
      var dataElement = new DataElement(name);
1✔
42

43
      if (StringUtils.isNotBlank(field.getPath()))
1✔
44
        dataElement.setPath(field.getPath());
1✔
45

46
      if (field.getCategories() != null) {
1✔
47
        List<String> categories = new ArrayList<>();
1✔
48
        for (String category : field.getCategories()) {
1✔
49
          if (hasCategories) {
1✔
50
            if (config.getCategories().contains(category))
1✔
51
              categories.add(category);
1✔
52
            else
53
              LOGGER.warning(String.format("Invalid category for field '%s': '%s'", name, category));
1✔
54
          } else {
55
            categories.add(category);
1✔
56
          }
57
        }
1✔
58
        dataElement.setCategories(categories);
1✔
59
      }
60

61
      if (field.isExtractable())
1✔
62
        dataElement.setExtractable();
1✔
63

64
      if (field.isInactive())
1✔
65
        dataElement.setActive(false);
×
66

67
      if (field.getRules() != null) {
1✔
68
        dataElement.setRule(field.getRules());
1✔
69
        for (Rule rule : field.getRules()) {
1✔
70
          if (ruleIds.contains(rule.getId()))
1✔
71
            LOGGER.warning("Duplicate rule id: " + rule.getId());
1✔
72
          ruleIds.add(rule.getId());
1✔
73
        }
1✔
74
      }
75

76
      if (StringUtils.isNotBlank(field.getIndexField()))
1✔
77
        dataElement.setIndexField(field.getIndexField());
1✔
78

79
      if (field.isAsLanguageTagged())
1✔
80
        dataElement.setAsLanguageTagged();
1✔
81

82
      schema.addField(dataElement);
1✔
83

84
      if (field.isIdentifierField())
1✔
85
        schema.setRecordId(dataElement);
×
86
    }
1✔
87

88
    if (config.getGroups() != null)
1✔
89
      for (Group group : config.getGroups())
1✔
90
        for (String category : group.getCategories())
1✔
91
          schema.addFieldGroup(new FieldGroup(category, group.getFields()));
1✔
92

93
    if (config.getNamespaces() != null)
1✔
94
      schema.setNamespaces(config.getNamespaces());
1✔
95

96
    schema.checkConsistency();
1✔
97
    return schema;
1✔
98
  }
99
}
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