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

pkiraly / metadata-qa-marc / #1432

17 Mar 2025 07:43PM UTC coverage: 90.603% (-0.05%) from 90.648%
#1432

push

pkiraly
Create translation analysis #595

36264 of 40025 relevant lines covered (90.6%)

0.91 hits per line

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

69.09
/src/main/java/de/gwdg/metadataqa/marc/cli/Shacl4bib.java
1
package de.gwdg.metadataqa.marc.cli;
2

3
import de.gwdg.metadataqa.api.configuration.SchemaConfiguration;
4
import de.gwdg.metadataqa.api.rule.RuleCatalog;
5
import de.gwdg.metadataqa.marc.CsvUtils;
6
import de.gwdg.metadataqa.marc.RuleCatalogUtils;
7
import de.gwdg.metadataqa.marc.cli.parameters.CommonParameters;
8
import de.gwdg.metadataqa.marc.cli.parameters.Shacl4bibParameters;
9
import de.gwdg.metadataqa.marc.cli.processor.BibliographicInputProcessor;
10
import de.gwdg.metadataqa.marc.cli.utils.BibSelector;
11
import de.gwdg.metadataqa.marc.cli.utils.BibSelectorFactory;
12
import de.gwdg.metadataqa.marc.cli.utils.RecordIterator;
13
import de.gwdg.metadataqa.marc.cli.utils.ShaclUtils;
14
import de.gwdg.metadataqa.marc.cli.utils.ignorablerecords.RecordFilter;
15
import de.gwdg.metadataqa.marc.dao.record.BibliographicRecord;
16
import de.gwdg.metadataqa.marc.model.validation.ValidationError;
17
import org.apache.commons.cli.Options;
18
import org.apache.commons.cli.ParseException;
19
import org.marc4j.marc.Record;
20

21
import java.io.File;
22
import java.io.IOException;
23
import java.io.Serializable;
24
import java.nio.file.Files;
25
import java.nio.file.Path;
26
import java.util.List;
27
import java.util.Map;
28
import java.util.logging.Level;
29
import java.util.logging.Logger;
30

31
public class Shacl4bib extends QACli<Shacl4bibParameters>
32
                       implements BibliographicInputProcessor, Serializable {
33

34
  private static final Logger logger = Logger.getLogger(Shacl4bib.class.getCanonicalName());
1✔
35

36
  private final boolean readyToProcess;
37
  private File outputFile;
38
  private RuleCatalog ruleCatalog;
39
  private SchemaConfiguration schema;
40
  private RecordFilter recordFilter;
41

42
  public Shacl4bib(String[] args) throws ParseException {
1✔
43
    parameters = new Shacl4bibParameters(args);
1✔
44
    recordFilter = parameters.getRecordFilter();
1✔
45
    readyToProcess = true;
1✔
46
  }
1✔
47

48
  public static void main(String[] args) {
49
    BibliographicInputProcessor processor = null;
1✔
50
    try {
51
      processor = new Shacl4bib(args);
1✔
52
    } catch (ParseException e) {
×
53
      System.err.println("ERROR. " + e.getLocalizedMessage());
×
54
      System.exit(1);
×
55
    }
1✔
56
    if (processor.getParameters().getArgs().length < 1) {
1✔
57
      System.err.println("Please provide a MARC file name!");
×
58
      processor.printHelp(processor.getParameters().getOptions());
×
59
      System.exit(0);
×
60
    }
61
    if (processor.getParameters().doHelp()) {
1✔
62
      processor.printHelp(processor.getParameters().getOptions());
×
63
      System.exit(0);
×
64
    }
65
    RecordIterator iterator = new RecordIterator(processor);
1✔
66
    iterator.start();
1✔
67
  }
1✔
68

69
  @Override
70
  public CommonParameters getParameters() {
71
    return parameters;
1✔
72
  }
73

74
  @Override
75
  public void beforeIteration() {
76
    logger.info(parameters.formatParameters());
1✔
77
    outputFile = new File(parameters.getOutputDir(), parameters.getShaclOutputFile());
1✔
78

79
    schema = ShaclUtils.setupSchema(parameters);
1✔
80
    ruleCatalog = ShaclUtils.setupRuleCatalog(schema, parameters);
1✔
81

82
    if (outputFile.exists()) {
1✔
83
      try {
84
        Files.delete(outputFile.toPath());
×
85
      } catch (IOException e) {
×
86
        logger.log(Level.SEVERE, "The output file ({}) has not been deleted", outputFile.getAbsolutePath());
×
87
      }
×
88
    }
89
    List<String> header = ruleCatalog.getHeader();
1✔
90
    header.add(0, "id");
1✔
91
    printToFile(outputFile, CsvUtils.createCsv(header));
1✔
92
  }
1✔
93

94
  @Override
95
  public void fileOpened(Path path) {
96
    logger.log(Level.INFO, "file opened: {0}", new Object[]{path});
1✔
97
  }
1✔
98

99
  @Override
100
  public void processRecord(Record marc4jRecord, int recordNumber) throws IOException {
101
    // do nothing
102
  }
1✔
103

104
  @Override
105
  public void processRecord(BibliographicRecord marcRecord, int recordNumber, List<ValidationError> errors) throws IOException {
106
    // do nothing
107
  }
×
108

109
  @Override
110
  public void processRecord(BibliographicRecord bibliographicRecord, int recordNumber) throws IOException {
111
    if (!recordFilter.isAllowable(bibliographicRecord)) {
1✔
112
      logger.info("ignoring " + bibliographicRecord.getId());
×
113
      return;
×
114
    }
115

116
    BibSelector selector = BibSelectorFactory.create(schema.getFormat(), bibliographicRecord);
1✔
117

118
    if (selector != null) {
1✔
119
      List<Object> values = RuleCatalogUtils.extract(ruleCatalog, ruleCatalog.measure(selector));
1✔
120
      values.add(0, bibliographicRecord.getId(true));
1✔
121
      printToFile(outputFile, CsvUtils.createCsvFromObjects(values));
1✔
122
    }
123
  }
1✔
124

125
  @Override
126
  public void fileProcessed() {
127
    // do nothing
128
  }
×
129

130
  @Override
131
  public void afterIteration(int numberOfprocessedRecords, long duration) {
132
    copyFileToOutputDir(parameters.getShaclConfigurationFile());
1✔
133
    saveParameters("shacl4bib.params.json", parameters, Map.of("numberOfprocessedRecords", numberOfprocessedRecords, "duration", duration));
1✔
134
  }
1✔
135

136
  @Override
137
  public void printHelp(Options options) {
138

139
  }
×
140

141
  @Override
142
  public boolean readyToProcess() {
143
    return readyToProcess;
1✔
144
  }
145
}
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