Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
RomanChernetskyi committed Oct 9, 2024
1 parent c811e65 commit c8216ca
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -275,23 +275,19 @@ public static void move001To035(Record srcRecord) {
public static void normalize035(Record srcRecord) {
List<Subfield> subfields = get035SubfieldOclcValues(srcRecord, TAG_035);
if (!subfields.isEmpty()) {
boolean isFormatted = formatOclc(subfields);
boolean isDeduplicated = deduplicateOclc(srcRecord, subfields, TAG_035);
if (isFormatted || isDeduplicated) {
recalculateLeaderAndParsedRecord(srcRecord);
}
formatOclc(subfields);
deduplicateOclc(srcRecord, subfields, TAG_035);
recalculateLeaderAndParsedRecord(srcRecord);
}
}

private static boolean formatOclc(List<Subfield> subfields) {
private static void formatOclc(List<Subfield> subfields) {
Pattern pattern = Pattern.compile(OCLC_PATTERN);
boolean formatted = false;

for (Subfield subfield : subfields) {
String data = subfield.getData().replaceAll("[.\\s]", "");
Matcher matcher = pattern.matcher(data);
if (matcher.find()) {
formatted = true;
String oclcTag = matcher.group(1); // "OCoLC"
String numericAndTrailing = matcher.group(5); // Numeric part and any characters that follow
String prefix = matcher.group(2); // Entire prefix including letters and potentially leading zeros
Expand All @@ -310,10 +306,9 @@ private static boolean formatOclc(List<Subfield> subfields) {
}
}
}
return formatted;
}

private static boolean deduplicateOclc(Record srcRecord, List<Subfield> subfields, String tag) {
private static void deduplicateOclc(Record srcRecord, List<Subfield> subfields, String tag) {
List<Subfield> subfieldsToDelete = new ArrayList<>();

for (Subfield subfield: new ArrayList<>(subfields)) {
Expand All @@ -328,8 +323,6 @@ private static boolean deduplicateOclc(Record srcRecord, List<Subfield> subfield
subfieldsToDelete.forEach(subfieldToDelete ->
variableFields.forEach(field -> removeSubfieldIfExist(marcRecord, field, subfieldToDelete)));
});

return !subfieldsToDelete.isEmpty();
}

private static boolean isOclcSubfieldDuplicated(Subfield s1, Subfield s2) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,35 @@ public static Collection<Object[]> data() {
"{\"leader\":\"00098nam 22000611a 4500\",\"fields\":[{\"001\":\"in001\"}," +
"{\"035\":{\"subfields\":[{\"a\":\"(OCoLC)607TST001\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"500\":{\"subfields\":[{\"a\":\"data\"}],\"ind1\":\" \",\"ind2\":\" \"}}]}"
},
{
"{\"leader\":\"00120nam 22000731a 4500\",\"fields\":[{\"001\":\"in001\"}," +
"{\"035\":{\"subfields\":[{\"a\":\"(OCoLC-M)ocn0001234\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"035\":{\"subfields\":[{\"a\":\"(ABC)ocn0001234\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"035\":{\"subfields\":[{\"a\":\"(OCoLC)ocn0001234\"}, {\"a\":\"(OCoLC)ocn1234\"}, {\"b\":\"(OCoLC)ocn1234\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"035\":{\"subfields\":[{\"a\":\"(OCoLC)ocm1234\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"035\":{\"subfields\":[{\"a\":\"(OCoLC)ocn00098765\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"035\":{\"subfields\":[{\"a\":\"(OCoLC)ocn0001234\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"500\":{\"subfields\":[{\"a\":\"data\"}],\"ind1\":\" \",\"ind2\":\" \"}}]}",

"{\"leader\":\"00218nam 22001091a 4500\",\"fields\":[{\"001\":\"in001\"}," +
"{\"035\":{\"subfields\":[{\"a\":\"(OCoLC-M)ocn0001234\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"035\":{\"subfields\":[{\"a\":\"(ABC)ocn0001234\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"035\":{\"subfields\":[{\"b\":\"(OCoLC)1234\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"035\":{\"subfields\":[{\"a\":\"(OCoLC)98765\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"035\":{\"subfields\":[{\"a\":\"(OCoLC)1234\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"500\":{\"subfields\":[{\"a\":\"data\"}],\"ind1\":\" \",\"ind2\":\" \"}}]}"
},
{
"{\"leader\":\"00126nam 22000731a 4500\",\"fields\":[{\"001\":\"in001\"}," +
"{\"035\":{\"subfields\":[{\"a\":\"(OCoLC)1234\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"035\":{\"subfields\":[{\"a\":\"(OCoLC-M)1234456\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"500\":{\"subfields\":[{\"a\":\"data\"}],\"ind1\":\" \",\"ind2\":\" \"}}]}",

"{\"leader\":\"00126nam 22000731a 4500\",\"fields\":[{\"001\":\"in001\"}," +
"{\"035\":{\"subfields\":[{\"a\":\"(OCoLC)1234\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"035\":{\"subfields\":[{\"a\":\"(OCoLC-M)1234456\"}],\"ind1\":\" \",\"ind2\":\" \"}}," +
"{\"500\":{\"subfields\":[{\"a\":\"data\"}],\"ind1\":\" \",\"ind2\":\" \"}}]}"
}
});
}
Expand Down

0 comments on commit c8216ca

Please sign in to comment.