diff --git a/backend/src/main/java/org/raddatz/familienarchiv/service/PersonNameParser.java b/backend/src/main/java/org/raddatz/familienarchiv/service/PersonNameParser.java index 2706d630..bb07e568 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/service/PersonNameParser.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/service/PersonNameParser.java @@ -23,7 +23,13 @@ public class PersonNameParser { private static final Pattern MULTI_SEPARATOR = Pattern.compile("\\s+(?:und|u)\\s+"); private static final Pattern SLASH_SEPARATOR = Pattern.compile("//"); - public record SplitName(String firstName, String lastName) {} + public record SplitName( + String title, + String firstName, + String lastName, + String maidenName, + String annotation + ) {} /** * Parses the "An" field from the ODS into individual normalised name strings. @@ -118,7 +124,7 @@ public class PersonNameParser { */ public static SplitName split(String rawName) { if (rawName == null || rawName.isBlank()) { - return new SplitName("?", "?"); + return new SplitName(null, "?", "?", null, null); } String cleaned = GEB_PATTERN.matcher(rawName).replaceAll("").trim(); @@ -132,15 +138,15 @@ public class PersonNameParser { if (lastName != null) { String firstName = cleaned.substring(0, cleaned.length() - lastName.length()).trim(); if (firstName.isBlank()) firstName = cleaned; - return new SplitName(firstName, lastName); + return new SplitName(null, firstName, lastName, null, null); } int lastSpace = cleaned.lastIndexOf(' '); if (lastSpace > 0) { - return new SplitName(cleaned.substring(0, lastSpace).trim(), cleaned.substring(lastSpace + 1).trim()); + return new SplitName(null, cleaned.substring(0, lastSpace).trim(), cleaned.substring(lastSpace + 1).trim(), null, null); } - return new SplitName(cleaned, "?"); + return new SplitName(null, cleaned, "?", null, null); } /** Returns the known last name that the given string ends with, or null. */ diff --git a/backend/src/test/java/org/raddatz/familienarchiv/service/PersonNameParserTest.java b/backend/src/test/java/org/raddatz/familienarchiv/service/PersonNameParserTest.java index 75eab4b2..6249b8aa 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/service/PersonNameParserTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/service/PersonNameParserTest.java @@ -81,6 +81,9 @@ class PersonNameParserTest { PersonNameParser.SplitName result = PersonNameParser.split("Walter de Gruyter"); assertThat(result.firstName()).isEqualTo("Walter"); assertThat(result.lastName()).isEqualTo("de Gruyter"); + assertThat(result.title()).isNull(); + assertThat(result.maidenName()).isNull(); + assertThat(result.annotation()).isNull(); } @Test @@ -107,22 +110,31 @@ class PersonNameParserTest { @Test void split_gebAnnotation_stripped() { PersonNameParser.SplitName result = PersonNameParser.split("Eugenie de Gruyter geb. Müller"); + assertThat(result.title()).isNull(); assertThat(result.firstName()).isEqualTo("Eugenie"); assertThat(result.lastName()).isEqualTo("de Gruyter"); + assertThat(result.maidenName()).isNull(); + assertThat(result.annotation()).isNull(); } @Test void split_null_returnsPlaceholder() { PersonNameParser.SplitName result = PersonNameParser.split(null); + assertThat(result.title()).isNull(); assertThat(result.firstName()).isEqualTo("?"); assertThat(result.lastName()).isEqualTo("?"); + assertThat(result.maidenName()).isNull(); + assertThat(result.annotation()).isNull(); } @Test void split_blank_returnsPlaceholder() { PersonNameParser.SplitName result = PersonNameParser.split(" "); + assertThat(result.title()).isNull(); assertThat(result.firstName()).isEqualTo("?"); assertThat(result.lastName()).isEqualTo("?"); + assertThat(result.maidenName()).isNull(); + assertThat(result.annotation()).isNull(); } @Test