From 970fe1c971a3cbf632a854c96b6ac97e643fcf53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kalle=20W=C3=A5hlin?= <72360110+kwahlin@users.noreply.github.com> Date: Thu, 17 Oct 2024 17:09:51 +0200 Subject: [PATCH] Support changes in Record (#1499) --- .../groovy/whelk/rest/api/BulkChangePreviewAPI.java | 13 ++++++++++--- whelk-core/src/main/groovy/whelk/Document.groovy | 2 ++ .../src/main/groovy/whelk/datatool/WhelkTool.groovy | 7 ++++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/rest/src/main/groovy/whelk/rest/api/BulkChangePreviewAPI.java b/rest/src/main/groovy/whelk/rest/api/BulkChangePreviewAPI.java index 11204e1460..398043a6fd 100644 --- a/rest/src/main/groovy/whelk/rest/api/BulkChangePreviewAPI.java +++ b/rest/src/main/groovy/whelk/rest/api/BulkChangePreviewAPI.java @@ -16,10 +16,13 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import static whelk.JsonLd.ID_KEY; +import static whelk.JsonLd.RECORD_KEY; import static whelk.util.Unicode.stripPrefix; public class BulkChangePreviewAPI extends HttpServlet { @@ -118,7 +121,12 @@ private static Map<String, String> makeLink(String id, int offset, int limit) { // FIXME mangle the data in a more ergonomic way @SuppressWarnings("unchecked") private Map<?,?> makePreviewChangeSet(Document doc, Transform transform) { - var modified = new ModifiedThing(doc.getThing(), transform, whelk.getJsonld().repeatableTerms); + var thing = new LinkedHashMap<String, Object>(doc.getThing()); + var record = new LinkedHashMap<String, Object>(doc.getRecord()); + // Remove @id from record to prevent from being shown as a link in the diff view + record.remove(ID_KEY); + thing.put(RECORD_KEY, record); + var modified = new ModifiedThing(thing, transform, whelk.getJsonld().repeatableTerms); var beforeDoc = doc.clone(); var afterDoc = doc.clone(); ((List<Map<?,?>>) beforeDoc.data.get(JsonLd.GRAPH_KEY)).set(1, modified.getBefore()); @@ -127,9 +135,8 @@ private Map<?,?> makePreviewChangeSet(Document doc, Transform transform) { new DocumentVersion(beforeDoc, "", ""), new DocumentVersion(afterDoc, "", "") ), whelk.getJsonld()); - var result = history.m_changeSetsMap; - result.put(JsonLd.ID_KEY, beforeDoc.getCompleteId()); + result.put(ID_KEY, beforeDoc.getCompleteId()); ((Map<String,Object>) DocumentUtil.getAtPath(result, List.of("changeSets", 0))).put("version", modified.getBefore()); ((Map<String,Object>) DocumentUtil.getAtPath(result, List.of("changeSets", 1))).put("version", modified.getAfter()); diff --git a/whelk-core/src/main/groovy/whelk/Document.groovy b/whelk-core/src/main/groovy/whelk/Document.groovy index 26a4fd39b0..4baada9b31 100644 --- a/whelk-core/src/main/groovy/whelk/Document.groovy +++ b/whelk-core/src/main/groovy/whelk/Document.groovy @@ -193,6 +193,8 @@ class Document { Map getThing() { get(thingPath) as Map } + Map getRecord() { get(recordPath) as Map } + void setDescriptionCreator(creator) { set(descriptionCreatorPath, creator) } String getDescriptionCreator() { get(descriptionCreatorPath) } diff --git a/whelktool/src/main/groovy/whelk/datatool/WhelkTool.groovy b/whelktool/src/main/groovy/whelk/datatool/WhelkTool.groovy index ebc2e5410d..e21524f625 100644 --- a/whelktool/src/main/groovy/whelk/datatool/WhelkTool.groovy +++ b/whelktool/src/main/groovy/whelk/datatool/WhelkTool.groovy @@ -37,6 +37,7 @@ import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicInteger import static java.util.concurrent.TimeUnit.SECONDS +import static whelk.JsonLd.RECORD_KEY import static whelk.util.Jackson.mapper class WhelkTool { @@ -924,12 +925,16 @@ class DocumentItem { } boolean modify(Map matchForm, Map targetForm) { + Map thing = (Map) this.graph[1] + thing[RECORD_KEY] = (Map) this.graph[0] + var m = new ModifiedThing( - (Map) this.graph[1], + thing, new Transform(matchForm, targetForm), whelk.jsonld.repeatableTerms) this.graph[1] = m.after + this.graph[0] = m.after.remove(RECORD_KEY) return m.isModified() }