Skip to content

Commit

Permalink
Making occurrence a first class citizen of PICA data fields #234
Browse files Browse the repository at this point in the history
  • Loading branch information
pkiraly committed Feb 26, 2023
1 parent 393a71f commit 6d18a6d
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 13 deletions.
5 changes: 4 additions & 1 deletion src/main/java/de/gwdg/metadataqa/marc/MarcSubfield.java
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,10 @@ public Map<String, List<String>> getKeyValuePairs(DataFieldKeyGenerator keyGener
prefixCache = new HashMap<>();
}

String cacheKey = String.format("%s$%s-%s-%s", this.getField().getTag(), code, keyGenerator.getType().getType(), keyGenerator.getMarcVersion());
String tag = this.getField().getTag();
if (this.getField().getOccurrence() != null)
tag += "/" + this.getField().getOccurrence();
String cacheKey = String.format("%s$%s-%s-%s", tag, code, keyGenerator.getType().getType(), keyGenerator.getMarcVersion());
if (!prefixCache.containsKey(cacheKey))
prefixCache.put(cacheKey, keyGenerator.forSubfield(this));
String prefix = prefixCache.get(cacheKey);
Expand Down
7 changes: 6 additions & 1 deletion src/main/java/de/gwdg/metadataqa/marc/dao/DataField.java
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,12 @@ public Map<String, List<String>> getKeyValuePairs(SolrFieldType type,
MarcVersion marcVersion) {
Map<String, List<String>> pairs = new HashMap<>();

DataFieldKeyGenerator keyGenerator = new DataFieldKeyGenerator(definition, type, getTag());
String tag = getTag();
if (getOccurrence() != null)
tag += "_" + getOccurrence();

SchemaType schemaType = marcRecord != null ? marcRecord.getSchemaType() : SchemaType.MARC21;
DataFieldKeyGenerator keyGenerator = new DataFieldKeyGenerator(definition, type, tag, schemaType);
keyGenerator.setMarcVersion(marcVersion);

// ind1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -430,9 +430,11 @@ public String asJson() {
}
fieldMap.put("subfields", subfields);

String tag = field.getDefinition() != null
? field.getDefinition().getTag()
: field.getTag();
String tag = field.getOccurrence() != null
? field.getTag() + "/" + field.getOccurrence()
: (field.getDefinition() != null
? field.getDefinition().getTag()
: field.getTag());

map.computeIfAbsent(tag, s -> new ArrayList<Map<String, Object>>());
((ArrayList)map.get(tag)).add(fieldMap);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import de.gwdg.metadataqa.marc.MarcSubfield;
import de.gwdg.metadataqa.marc.definition.MarcVersion;
import de.gwdg.metadataqa.marc.definition.bibliographic.SchemaType;
import de.gwdg.metadataqa.marc.definition.structure.DataFieldDefinition;
import de.gwdg.metadataqa.marc.definition.structure.SubfieldDefinition;
import de.gwdg.metadataqa.marc.model.SolrFieldType;
Expand All @@ -28,15 +29,21 @@ public DataFieldKeyGenerator(DataFieldDefinition definition, SolrFieldType type)

public DataFieldKeyGenerator(DataFieldDefinition definition,
SolrFieldType type,
String tag) {
String tag,
SchemaType schemaType) {
this.definition = definition;
this.type = type;
if (definition != null) {
this.tag = definition.getTag();
indexTag = definition.getIndexTag();
} else {
if (schemaType.equals(SchemaType.PICA)) {
this.tag = tag;
indexTag = tag;
this.indexTag = tag;
} else {
if (definition != null) {
this.tag = definition.getTag();
this.indexTag = definition.getIndexTag();
} else {
this.tag = tag;
this.indexTag = tag;
}
}
}

Expand Down Expand Up @@ -191,4 +198,8 @@ public SolrFieldType getType() {
public MarcVersion getMarcVersion() {
return marcVersion;
}

public String getTag() {
return tag;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ public void pica() throws Exception {
BibliographicRecord marcRecord = MarcFactory.createPicaFromMarc4j(record, schema);
Map<String, List<String>> map = marcRecord.getKeyValuePairs(SolrFieldType.HUMAN, true, MarcVersion.MARC21);
// System.err.println(map.keySet());
System.err.println(marcRecord.asJson());
assertTrue(marcRecord.asJson().contains("036E/01"));
assertTrue(map.containsKey("036E_01_a"));
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import de.gwdg.metadataqa.api.util.FileUtils;
import de.gwdg.metadataqa.marc.cli.utils.RecordIterator;
import org.apache.commons.lang3.StringUtils;
import org.junit.Before;
import org.junit.Test;

Expand Down

0 comments on commit 6d18a6d

Please sign in to comment.