diff --git a/repository/src/main/java/org/alfresco/repo/audit/AuditRecordUtils.java b/repository/src/main/java/org/alfresco/repo/audit/AuditRecordUtils.java index c9540e27d5..d9246cf39d 100644 --- a/repository/src/main/java/org/alfresco/repo/audit/AuditRecordUtils.java +++ b/repository/src/main/java/org/alfresco/repo/audit/AuditRecordUtils.java @@ -47,10 +47,20 @@ public class AuditRecordUtils * is a length of key root. * @return a preloaded {@link AuditRecord.Builder} */ - @SuppressWarnings("unchecked") public static AuditRecord.Builder generateAuditRecordBuilder(Map data, int keyRootLength) { var auditRecordBuilder = AuditRecord.builder(); + + var rootNode = createRootNode(data, keyRootLength); + + auditRecordBuilder.setAuditRecordData(rootNode); + + return auditRecordBuilder; + } + + @SuppressWarnings("unchecked") + private static HashMap createRootNode(Map data, int keyRootLength) + { var rootNode = new HashMap(); data.forEach((k, v) -> { @@ -63,14 +73,17 @@ public class AuditRecordUtils } current.put(keys[keys.length - 1], decodeValueByInstance(v)); }); - auditRecordBuilder.setAuditRecordData(rootNode); - - return auditRecordBuilder; + return rootNode; } + @SuppressWarnings("unchecked") private static Serializable decodeValueByInstance(Serializable value) { - if (value instanceof NodeRef) + if (value instanceof HashMap) + { + return createRootNode((HashMap) value, 0); + } + else if (value instanceof NodeRef) { return ((NodeRef) value).getId(); } diff --git a/repository/src/test/java/org/alfresco/repo/audit/AuditRecordUtilsTest.java b/repository/src/test/java/org/alfresco/repo/audit/AuditRecordUtilsTest.java index a9e65dc1d0..009c544686 100644 --- a/repository/src/test/java/org/alfresco/repo/audit/AuditRecordUtilsTest.java +++ b/repository/src/test/java/org/alfresco/repo/audit/AuditRecordUtilsTest.java @@ -37,6 +37,7 @@ import java.util.Map; import org.junit.Test; +import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; public class AuditRecordUtilsTest @@ -78,4 +79,45 @@ public class AuditRecordUtilsTest assertEquals(testData.get("/alfresco-access/transaction/properties/to"), properties.get("to")); } + + @SuppressWarnings("unchecked") + @Test + public void testGenerateAuditRecordBuilderTestNodeRef() + { + var testData = new HashMap(); + var expectedValue = new HashMap(); + + expectedValue.put("nodeRef", new NodeRef("workspace://SpacesStore/bfa612e6-1a02-46a0-a612-e61a02e6a036")); + expectedValue.put("objectId", "bfa612e6-1a02-46a0-a612-e61a02e6a036;1.0"); + + testData.put("/CMISChangeLog/CREATED/result/value", expectedValue); + + var builder = AuditRecordUtils.generateAuditRecordBuilder(testData, "/CMISChangeLog/".length()); + builder.setAuditRecordType("CMISChangeLog"); + var auditRecord = builder.build(); + + assertNotNull(auditRecord); + + assertEquals("CMISChangeLog", auditRecord.getAuditApplicationId()); + + var auditData = auditRecord.getAuditData(); + assertEquals(1, auditData.size()); + + var created = (HashMap) auditData.get("CREATED"); + assertNotNull(created); + + assertEquals(1, created.size()); + var result = (HashMap) created.get("result"); + assertNotNull(result); + assertEquals(1, result.size()); + + var resultValue = (HashMap) result.get("value"); + assertNotNull(resultValue); + assertEquals(2, resultValue.size()); + + var expectedNodeRef = (NodeRef) expectedValue.get("nodeRef"); + assertEquals(expectedNodeRef.getId(), resultValue.get("nodeRef")); + assertEquals(expectedValue.get("objectId"), resultValue.get("objectId")); + + } }