From 0bcf11beec07d78412a0d0dcde05655091f42a6f Mon Sep 17 00:00:00 2001 From: pkiraly Date: Tue, 21 Jun 2022 21:50:29 +0200 Subject: [PATCH] issue #137: allowableRecords --- .../marc/cli/parameters/CommonParameters.java | 5 ++ .../utils/ignorablerecords/CriteriumPica.java | 8 +++ .../utils/ignorablerecords/Marc21Filter.java | 3 - .../ignorablerecords/RecordFilterMarc21.java | 8 +++ .../ignorablerecords/RecordFilterPica.java | 3 + .../RecordIgnoratorMarc21.java | 3 + .../cli/parameters/CommonParametersTest.java | 64 +++++++++++++++++++ 7 files changed, 91 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/gwdg/metadataqa/marc/cli/parameters/CommonParameters.java b/src/main/java/de/gwdg/metadataqa/marc/cli/parameters/CommonParameters.java index 68e37195f..d9b580806 100644 --- a/src/main/java/de/gwdg/metadataqa/marc/cli/parameters/CommonParameters.java +++ b/src/main/java/de/gwdg/metadataqa/marc/cli/parameters/CommonParameters.java @@ -118,6 +118,7 @@ public CommonParameters(String[] arguments) throws ParseException { trimId = cmd.hasOption("trimId"); readIgnorableFields(); readIgnorableRecords(); + readAllowableRecords(); readDefaultEncoding(); readAlephseqLineType(); readPicaIdField(); @@ -165,6 +166,7 @@ private void readIgnorableRecords() { } private void readAllowableRecords() { + String allowableRecords = cmd.hasOption("allowableRecords") ? cmd.getOptionValue("allowableRecords") : ""; setRecordFilter(allowableRecords); } @@ -448,6 +450,9 @@ public void setRecordIgnorator(String ignorableRecords) { this.recordIgnorator = RecordIgnoratorFactory.create(schemaType, ignorableRecords.trim()); } + public RecordFilter getRecordFilter() { + return recordFilter; + } public void setRecordFilter(String allowableRecords) { this.recordFilter = RecordFilterFactory.create(schemaType, allowableRecords.trim()); diff --git a/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/CriteriumPica.java b/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/CriteriumPica.java index f19707f69..f4bfff4b3 100644 --- a/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/CriteriumPica.java +++ b/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/CriteriumPica.java @@ -127,4 +127,12 @@ private boolean subfieldEndsWith(List instances) { return false; } + @Override + public String toString() { + return "CriteriumPica{" + + "path=" + path.getPath() + + ", operator=" + operator + + ", value='" + value + '\'' + + '}'; + } } diff --git a/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/Marc21Filter.java b/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/Marc21Filter.java index e613d8aa0..f288b1f5c 100644 --- a/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/Marc21Filter.java +++ b/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/Marc21Filter.java @@ -45,9 +45,6 @@ protected DataField parseField(String field) { } protected boolean met(MarcRecord marcRecord) { - if (isEmpty()) - return false; - for (DataField condition : conditions) { List recordFields = marcRecord.getDatafield(condition.getTag()); if (recordFields == null || recordFields.isEmpty()) diff --git a/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/RecordFilterMarc21.java b/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/RecordFilterMarc21.java index 9192e39d5..1cc826d09 100644 --- a/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/RecordFilterMarc21.java +++ b/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/RecordFilterMarc21.java @@ -18,6 +18,14 @@ public boolean isEmpty() { @Override public boolean isAllowable(MarcRecord marcRecord) { + if (isEmpty()) + return true; + return met(marcRecord); } + + @Override + public String toString() { + return isEmpty() ? "" : conditions.toString(); + } } diff --git a/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/RecordFilterPica.java b/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/RecordFilterPica.java index 4ec8f68e0..4a1d49df1 100644 --- a/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/RecordFilterPica.java +++ b/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/RecordFilterPica.java @@ -18,6 +18,9 @@ public boolean isEmpty() { @Override public boolean isAllowable(MarcRecord marcRecord) { + if (isEmpty()) + return true; + for (CriteriumPica criterium : criteria) { boolean passed = criterium.met(marcRecord); if (passed) diff --git a/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/RecordIgnoratorMarc21.java b/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/RecordIgnoratorMarc21.java index 33641813d..b3e12fc1c 100644 --- a/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/RecordIgnoratorMarc21.java +++ b/src/main/java/de/gwdg/metadataqa/marc/cli/utils/ignorablerecords/RecordIgnoratorMarc21.java @@ -19,6 +19,9 @@ public boolean isEmpty() { @Override public boolean isIgnorable(MarcRecord marcRecord) { + if (isEmpty()) + return false; + return met(marcRecord); } diff --git a/src/test/java/de/gwdg/metadataqa/marc/cli/parameters/CommonParametersTest.java b/src/test/java/de/gwdg/metadataqa/marc/cli/parameters/CommonParametersTest.java index 8ca759068..8c80a8ec8 100644 --- a/src/test/java/de/gwdg/metadataqa/marc/cli/parameters/CommonParametersTest.java +++ b/src/test/java/de/gwdg/metadataqa/marc/cli/parameters/CommonParametersTest.java @@ -1,5 +1,9 @@ package de.gwdg.metadataqa.marc.cli.parameters; +import de.gwdg.metadataqa.marc.cli.utils.ignorablerecords.RecordFilterMarc21; +import de.gwdg.metadataqa.marc.cli.utils.ignorablerecords.RecordFilterPica; +import de.gwdg.metadataqa.marc.cli.utils.ignorablerecords.RecordIgnoratorMarc21; +import de.gwdg.metadataqa.marc.cli.utils.ignorablerecords.RecordIgnoratorPica; import de.gwdg.metadataqa.marc.definition.DataSource; import de.gwdg.metadataqa.marc.definition.MarcFormat; import de.gwdg.metadataqa.marc.definition.bibliographic.SchemaType; @@ -317,4 +321,64 @@ public void getPicaRecordType_set() { assertEquals("003$d", parameters.getPicaRecordTypeField()); } + @Test + public void getRecordIgnorator_pica() { + String[] arguments = new String[]{"--schemaType", "PICA", "--ignorableRecords", "002@.0 !~ '^L'"}; + CommonParameters parameters = null; + try { + parameters = new CommonParameters(arguments); + } catch (ParseException e) { + logger.log(Level.WARNING, "error in schemaType()", e); + } + assertEquals("RecordIgnoratorPica", parameters.getRecordIgnorator().getClass().getSimpleName()); + assertEquals(1, ((RecordIgnoratorPica)parameters.getRecordIgnorator()).getCriteria().size()); + assertEquals("CriteriumPica{path=002@.0, operator=NOT_MATCH, value='^L'}", + ((RecordIgnoratorPica)parameters.getRecordIgnorator()).getCriteria().get(0).toString()); + } + + @Test + public void getRecordIgnorator_marc21() { + String[] arguments = new String[]{"--schemaType", "MARC21", "--ignorableRecords", "STA$a=SUPPRESSED"}; + CommonParameters parameters = null; + try { + parameters = new CommonParameters(arguments); + } catch (ParseException e) { + logger.log(Level.WARNING, "error in schemaType()", e); + } + assertEquals("RecordIgnoratorMarc21", parameters.getRecordIgnorator().getClass().getSimpleName()); + assertEquals( + "[DataField{STA, ind1=' ', ind2=' ', subfields=[MarcSubfield{code='a', value='SUPPRESSED'}]}]", + ((RecordIgnoratorMarc21)parameters.getRecordIgnorator()).toString()); + } + + @Test + public void getRecordFilter_pica() { + String[] arguments = new String[]{"--schemaType", "PICA", "--allowableRecords", "002@.0 !~ '^L'"}; + CommonParameters parameters = null; + try { + parameters = new CommonParameters(arguments); + } catch (ParseException e) { + logger.log(Level.WARNING, "error in schemaType()", e); + } + assertEquals("RecordFilterPica", parameters.getRecordFilter().getClass().getSimpleName()); + assertEquals(1, ((RecordFilterPica)parameters.getRecordFilter()).getCriteria().size()); + assertEquals("CriteriumPica{path=002@.0, operator=NOT_MATCH, value='^L'}", + ((RecordFilterPica)parameters.getRecordFilter()).getCriteria().get(0).toString()); + } + + @Test + public void getRecordFilter_marc21() { + String[] arguments = new String[]{"--schemaType", "MARC21", "--allowableRecords", "STA$a=SUPPRESSED"}; + CommonParameters parameters = null; + try { + parameters = new CommonParameters(arguments); + } catch (ParseException e) { + logger.log(Level.WARNING, "error in schemaType()", e); + } + assertEquals("RecordFilterMarc21", parameters.getRecordFilter().getClass().getSimpleName()); + assertEquals( + "[DataField{STA, ind1=' ', ind2=' ', subfields=[MarcSubfield{code='a', value='SUPPRESSED'}]}]", + ((RecordFilterMarc21)parameters.getRecordFilter()).toString()); + } + }