From 46f6e6cdefe80183f158281892b4f1c3eab4b733 Mon Sep 17 00:00:00 2001 From: Ruslan Lavrov Date: Mon, 7 Oct 2024 21:04:19 +0300 Subject: [PATCH] Added normalization function to map subject source by code --- ramls/settings/subjectSource.json | 4 ++++ .../functions/NormalizationFunction.java | 18 ++++++++++++++++++ .../mapping/instance/subjectSources.json | 15 +++++++++------ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/ramls/settings/subjectSource.json b/ramls/settings/subjectSource.json index 3b3ab205..9f7d2f9c 100644 --- a/ramls/settings/subjectSource.json +++ b/ramls/settings/subjectSource.json @@ -10,6 +10,10 @@ "description": "label for the subject source", "type": "string" }, + "code": { + "description": "label for the subject source code", + "type": "string" + }, "source": { "type": "string", "description": "label indicating where the subject source entry originates from, i.e. 'folio' or 'local'", diff --git a/src/main/java/org/folio/processing/mapping/defaultmapper/processor/functions/NormalizationFunction.java b/src/main/java/org/folio/processing/mapping/defaultmapper/processor/functions/NormalizationFunction.java index f76cbdfb..de31b779 100644 --- a/src/main/java/org/folio/processing/mapping/defaultmapper/processor/functions/NormalizationFunction.java +++ b/src/main/java/org/folio/processing/mapping/defaultmapper/processor/functions/NormalizationFunction.java @@ -442,6 +442,24 @@ public String apply(RuleExecutionContext context) { } }, + SET_SUBJECT_SOURCE_ID_BY_CODE() { + @Override + public String apply(RuleExecutionContext context) { + List subjectSources = context.getMappingParameters().getSubjectSources(); + String sourceCode = context.getSubFieldValue(); + + if (sourceCode == null || subjectSources == null) { + return StringUtils.EMPTY; + } + + return subjectSources.stream() + .filter(subjectSource -> subjectSource.getCode() != null && subjectSource.getCode().equalsIgnoreCase(sourceCode)) + .findFirst() + .map(SubjectSource::getId) + .orElse(StringUtils.EMPTY); + } + }, + SET_SUBJECT_TYPE_ID() { private static final String NAME_PARAMETER = "name"; diff --git a/src/test/resources/org/folio/processing/mapping/instance/subjectSources.json b/src/test/resources/org/folio/processing/mapping/instance/subjectSources.json index 480aa382..3afada16 100644 --- a/src/test/resources/org/folio/processing/mapping/instance/subjectSources.json +++ b/src/test/resources/org/folio/processing/mapping/instance/subjectSources.json @@ -1,14 +1,18 @@ -[ { +[ + { "id" : "e894d0dc-621d-4b1d-98f6-6f7120eb0d40", "name" : "Library of Congress Subject Headings", + "code" : "lcsh", "source" : "folio" }, { "id" : "e894d0dc-621d-4b1d-98f6-6f7120eb0d41", "name" : "Library of Congress Children's and Young Adults' Subject Headings", + "code" : "cyac", "source" : "folio" }, { "id" : "e894d0dc-621d-4b1d-98f6-6f7120eb0d42", "name" : "Medical Subject Headings", + "code" : "mesh", "source" : "folio" }, { "id" : "e894d0dc-621d-4b1d-98f6-6f7120eb0d43", @@ -21,13 +25,12 @@ }, { "id" : "e894d0dc-621d-4b1d-98f6-6f7120eb0d45", "name" : "Canadian Subject Headings", + "code" : "cash", "source" : "folio" }, { "id" : "e894d0dc-621d-4b1d-98f6-6f7120eb0d46", "name" : "Répertoire de vedettes-matière", + "code" : "rvm", "source" : "folio" - }, { - "id" : "e894d0dc-621d-4b1d-98f6-6f7120eb0d47", - "name" : "Source specified in subfield $2", - "source" : "folio" - } ] + } +]