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

pkiraly / metadata-qa-marc / #1527

22 Aug 2025 02:21PM UTC coverage: 90.345%. Remained the same
#1527

push

pkiraly
Improve timeline handling

5191 of 6416 new or added lines in 219 files covered. (80.91%)

886 existing lines in 78 files now uncovered.

36717 of 40641 relevant lines covered (90.34%)

0.9 hits per line

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

91.84
/src/main/java/de/gwdg/metadataqa/marc/cli/plugin/PicaCompletenessPlugin.java
1
package de.gwdg.metadataqa.marc.cli.plugin;
2

3
import de.gwdg.metadataqa.marc.cli.parameters.CompletenessParameters;
4
import de.gwdg.metadataqa.marc.dao.DataField;
5
import de.gwdg.metadataqa.marc.dao.record.BibliographicRecord;
6
import de.gwdg.metadataqa.marc.definition.structure.SubfieldDefinition;
7
import de.gwdg.metadataqa.marc.definition.tags.TagCategory;
8
import de.gwdg.metadataqa.marc.utils.TagHierarchy;
9
import de.gwdg.metadataqa.marc.utils.pica.FieldPath;
10
import de.gwdg.metadataqa.marc.utils.pica.PicaFieldDefinition;
11
import de.gwdg.metadataqa.marc.utils.pica.PicaSchemaManager;
12
import de.gwdg.metadataqa.marc.utils.pica.PicaSchemaReader;
13

14
import java.io.Serializable;
15
import java.util.List;
16
import java.util.Map;
17
import java.util.regex.Pattern;
18

19
public class PicaCompletenessPlugin implements CompletenessPlugin, Serializable {
20
  private static final long serialVersionUID = 2002980948561227741L;
21

22
  private final CompletenessParameters parameters;
23
  private final String typeField;
24
  private final String typeSubfield;
25
  private final String separator;
26
  private final PicaSchemaManager picaSchema;
27
  private static final Map<String, String> types = Map.ofEntries(
1✔
28
    Map.entry("A", "Druckschriften (einschließlich Bildbänden)"),
1✔
29
    Map.entry("B", "Tonträger, Videodatenträger, Bildliche Darstellungen"),
1✔
30
    Map.entry("C", "Blindenschriftträger und andere taktile Materialien"),
1✔
31
    Map.entry("E", "Mikroform"),
1✔
32
    Map.entry("H", "Handschriftliches Material"),
1✔
33
    Map.entry("L", "Lokales Katalogisat (nur GBV)"),
1✔
34
    Map.entry("O", "Elektronische Ressource im Fernzugriff"),
1✔
35
    Map.entry("S", "Elektronische Ressource auf Datenträger"),
1✔
36
    Map.entry("V", "Objekt"),
1✔
37
    Map.entry("Z", "Medienkombination"),
1✔
38
    Map.entry("a", "Mailboxsatz")
1✔
39
  );
40

41
  public PicaCompletenessPlugin(CompletenessParameters parameters) {
1✔
42
    this.parameters = parameters;
1✔
43
    separator = Pattern.quote(parameters.getPicaSubfieldSeparator());
1✔
44
    FieldPath path = parse(parameters.getPicaRecordTypeField());
1✔
45
    typeField = path.getField();
1✔
46
    typeSubfield = path.getSubfield();
1✔
47
    picaSchema = PicaSchemaReader.createSchemaManager(parameters.getPicaSchemaFile());
1✔
48
  }
1✔
49

50
  @Override
51
  public String getDocumentType(BibliographicRecord marcRecord) {
52
    List<DataField> fieldInstances = marcRecord.getDatafieldsByTag(typeField);
1✔
53
    if (fieldInstances == null || fieldInstances.isEmpty())
1✔
54
      return "invalid";
1✔
55
    String code = fieldInstances.get(0).getSubfield(typeSubfield).get(0).getValue().substring(0, 1);
1✔
56
    return types.getOrDefault(code, "invalid");
1✔
57
  }
58

59
  @Override
60
  public TagHierarchy getTagHierarchy(String rawpath) {
61
    FieldPath path = parse(rawpath);
1✔
62
    String fieldLabel = "";
1✔
63
    String subfieldLabel = "";
1✔
64
    PicaFieldDefinition fieldDefinition = picaSchema.lookup(path.getField());
1✔
65
    TagCategory category = TagCategory.OTHER;
1✔
66
    if (fieldDefinition != null) {
1✔
67
      category = getTagCategory(fieldDefinition);
1✔
68
      fieldLabel = fieldDefinition.getLabel();
1✔
69
      if (!path.getSubfield().equals("")){
1✔
70
        SubfieldDefinition subfieldDefinition = fieldDefinition.getSubfield(path.getSubfield());
1✔
71
        subfieldLabel = subfieldDefinition != null ? subfieldDefinition.getLabel() : "";
1✔
72
      }
73
    }
74

75
    return new TagHierarchy(category, fieldLabel, subfieldLabel);
1✔
76
  }
77

78
  @Override
79
  public String getPackageName(DataField field) {
80
    if (field.getDefinition() != null) {
1✔
81
      return getTagCategory((PicaFieldDefinition) field.getDefinition()).getPackageName();
1✔
82
    }
UNCOV
83
    return TagCategory.OTHER.getPackageName();
×
84
  }
85

86
  private TagCategory getTagCategory(PicaFieldDefinition field) {
87
    switch (field.getTag().substring(0, 1)) {
1✔
88
      case "0": return TagCategory.PICA_0;
1✔
UNCOV
89
      case "1": return TagCategory.PICA_1;
×
UNCOV
90
      case "2": return TagCategory.PICA_2;
×
91
      default:
UNCOV
92
        return TagCategory.OTHER;
×
93
    }
94
  }
95

96
  private FieldPath parse(String path) {
97
    String[] parts = path.split(separator);
1✔
98
    if (parts.length == 1) {
1✔
99
      return new FieldPath(parts[0], "");
1✔
100
    }
101
    return new FieldPath(parts[0], parts[1]);
1✔
102
  }
103
}
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