From 0f251114a3f5e792c40ce3681f11474704cf1f83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Prante?= Date: Fri, 9 Jun 2023 17:29:18 +0200 Subject: [PATCH] add replace subfield method to MarcField builder --- gradle.properties | 2 +- src/main/java/org/xbib/marc/MarcField.java | 24 +++++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 26a7e75..5d7091c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ group = org.xbib name = marc -version = 2.11.0 +version = 2.12.0 org.gradle.warning.mode = ALL diff --git a/src/main/java/org/xbib/marc/MarcField.java b/src/main/java/org/xbib/marc/MarcField.java index 4eef14d..0c6e7c3 100644 --- a/src/main/java/org/xbib/marc/MarcField.java +++ b/src/main/java/org/xbib/marc/MarcField.java @@ -15,6 +15,7 @@ */ package org.xbib.marc; +import java.util.Objects; import org.xbib.marc.dialects.mab.MabSubfieldControl; import org.xbib.marc.label.RecordLabel; @@ -609,6 +610,7 @@ public class MarcField implements Comparable { * @return this builder */ public Builder removeSubfields(Set subfieldIds) { + // create a new subfield list and replace the whole list by a filtered list LinkedList list = subfields.stream() .filter(sf -> !subfieldIds.contains(sf.id)) .collect(Collectors.toCollection(LinkedList::new)); @@ -617,6 +619,22 @@ public class MarcField implements Comparable { return this; } + /** + * In-place replacement of all subfields with a given ID. + * @param subfieldId the subfield ID + * @param newValue the new value, must be non-null + * @return this builder + */ + public Builder replace(String subfieldId, String newValue) { + Objects.requireNonNull(newValue); + for (Subfield subfield : subfields) { + if (subfield.getId().equals(subfieldId)) { + subfield.setValue(newValue); + } + } + return this; + } + /** * Copy a MARC field into this builder. * @param field the MARC field to copy @@ -785,7 +803,7 @@ public class MarcField implements Comparable { private final String id; - private final String value; + private String value; private Subfield(String id, String value) { this.id = id; @@ -808,6 +826,10 @@ public class MarcField implements Comparable { return value; } + private void setValue(String value) { + this.value = value; + } + @Override public boolean equals(Object obj) { return obj instanceof Subfield && toString().equals(obj.toString());