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 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(doc.getThing()); + var record = new LinkedHashMap(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>) 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) DocumentUtil.getAtPath(result, List.of("changeSets", 0))).put("version", modified.getBefore()); ((Map) 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() }