• 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

70.0
/src/main/java/de/gwdg/metadataqa/marc/analysis/BLClassifier.java
1
package de.gwdg.metadataqa.marc.analysis;
2

3
import de.gwdg.metadataqa.marc.MarcSubfield;
4
import de.gwdg.metadataqa.marc.analysis.bl.Element;
5
import de.gwdg.metadataqa.marc.analysis.bl.UseCase;
6
import de.gwdg.metadataqa.marc.dao.DataField;
7
import de.gwdg.metadataqa.marc.dao.record.BibliographicRecord;
8

9
import java.io.Serializable;
10
import java.util.ArrayList;
11
import java.util.List;
12
import java.util.logging.Level;
13
import java.util.logging.Logger;
14

15
import static de.gwdg.metadataqa.marc.analysis.bl.Band.BASIC;
16
import static de.gwdg.metadataqa.marc.analysis.bl.Band.DEFICIENT;
17
import static de.gwdg.metadataqa.marc.analysis.bl.Band.EFFECTIVE;
18
import static de.gwdg.metadataqa.marc.analysis.bl.Band.SATISFACTORY;
19

20
public class BLClassifier implements Classifier, Serializable {
21
  private static final Logger logger = Logger.getLogger(BLClassifier.class.getCanonicalName());
1✔
22
  private static final long serialVersionUID = -2857198788418059494L;
23

24
  private List<UseCase> basicUseCases = new ArrayList<>();
1✔
25
  private List<UseCase> satisfactoryUseCases = new ArrayList<>();
1✔
26
  private List<UseCase> effectiveUseCases = new ArrayList<>();
1✔
27

28
  public BLClassifier() {
1✔
29
    for (UseCase useCase : UseCase.values()) {
1✔
30
      if (useCase.getBand().equals(BASIC))
1✔
31
        basicUseCases.add(useCase);
1✔
32
      else if (useCase.getBand().equals(SATISFACTORY))
1✔
33
        satisfactoryUseCases.add(useCase);
1✔
34
      else if (useCase.getBand().equals(EFFECTIVE))
1✔
35
        effectiveUseCases.add(useCase);
1✔
36
    }
37
  }
1✔
38

39
  @Override
40
  public String classify(BibliographicRecord marcRecord) {
41
    String level = DEFICIENT.name();
1✔
42

43
    for (UseCase useCase : basicUseCases)
1✔
44
      if (useCase.getStatus().equals("Mandatory") && !useCase.getElements().isEmpty() && !satisfy(marcRecord, useCase))
1✔
45
        return level;
1✔
UNCOV
46
    level = BASIC.name();
×
47

UNCOV
48
    for (UseCase useCase : satisfactoryUseCases)
×
49
      if (!useCase.getElements().isEmpty() && !satisfy(marcRecord, useCase))
×
50
        return level;
×
51
    level = SATISFACTORY.name();
×
52

UNCOV
53
    for (UseCase useCase : effectiveUseCases)
×
54
      if (!useCase.getElements().isEmpty() && !satisfy(marcRecord, useCase))
×
55
        return level;
×
56
    level = EFFECTIVE.name();
×
57
    return level;
×
58
  }
59

60
  private boolean satisfy(BibliographicRecord marcRecord, UseCase useCase) {
61
    for (Element element : useCase.getElements()) {
1✔
62
      if (marcRecord.hasDatafield(element.getTag())) {
1✔
63
        if (element.getSubfield() == null) {
1✔
UNCOV
64
          return true;
×
65
        } else {
66
          for (DataField field : marcRecord.getDatafieldsByTag(element.getTag())) {
1✔
67
            List<MarcSubfield> subfields = field.getSubfield(element.getSubfield());
1✔
68
            if (subfields != null && !subfields.isEmpty())
1✔
69
              return true;
1✔
UNCOV
70
          }
×
71
        }
72
      }
73
    }
1✔
74
    logger.log(Level.INFO, "failed for {0} ({1} -- {2} -- {3})",
1✔
75
      new Object[]{useCase.name(), useCase.getUseCase(), useCase.getEncoding(), useCase.getDataElelemntsNormalized()});
1✔
76
    return false;
1✔
77
  }
78
}
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