From 8572c5cb7e96752b1b8406f2fa29aa96c5be34d5 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Fri, 9 Feb 2024 17:00:32 -0600 Subject: [PATCH] Add LinkedList as a class that the copy constructor knows how to handle w/o Serialization --- .../qqq/backend/core/model/data/QRecord.java | 6 ++++ .../backend/core/model/data/QRecordTest.java | 28 ++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/data/QRecord.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/data/QRecord.java index ce37a9a2..84a521f3 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/data/QRecord.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/data/QRecord.java @@ -32,6 +32,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; import com.kingsrook.qqq.backend.core.exceptions.QException; @@ -167,6 +168,11 @@ public class QRecord implements Serializable ArrayList cloneList = new ArrayList<>(arrayList); clone.put(entry.getKey(), (V) cloneList); } + else if(entry.getValue() instanceof LinkedList linkedList) + { + LinkedList cloneList = new LinkedList<>(linkedList); + clone.put(entry.getKey(), (V) cloneList); + } else if(entry.getValue() instanceof LinkedHashMap linkedHashMap) { LinkedHashMap cloneMap = new LinkedHashMap<>(linkedHashMap); diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/data/QRecordTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/data/QRecordTest.java index 8552c8b5..72f88d3e 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/data/QRecordTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/data/QRecordTest.java @@ -26,6 +26,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; import com.kingsrook.qqq.backend.core.BaseTest; @@ -175,7 +176,7 @@ class QRecordTest extends BaseTest ** *******************************************************************************/ @Test - void testListAsValue() + void testArrayListAsValue() { ArrayList originalArrayList = new ArrayList<>(List.of(1, 2, 3)); QRecord recordWithArrayListValue = new QRecord().withValue("myList", originalArrayList); @@ -196,6 +197,31 @@ class QRecordTest extends BaseTest + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testLinkedListAsValue() + { + LinkedList originalLinkedList = new LinkedList<>(List.of(1, 2, 3)); + QRecord recordWithLinkedListValue = new QRecord().withValue("myList", originalLinkedList); + QRecord cloneWithLinkedListValue = new QRecord(recordWithLinkedListValue); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // the clone list and original list should be equals (have contents that are equals), but not be the same (reference) // + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + assertEquals(List.of(1, 2, 3), cloneWithLinkedListValue.getValue("myList")); + assertNotSame(originalLinkedList, cloneWithLinkedListValue.getValue("myList")); + + ////////////////////////////////////////////////////////////////////////////////////////////////////// + // make sure a change to the original list doesn't change the cloned list (as it was cloned deeply) // + ////////////////////////////////////////////////////////////////////////////////////////////////////// + originalLinkedList.add(4); + assertNotEquals(originalLinkedList, cloneWithLinkedListValue.getValue("myList")); + } + + + /******************************************************************************* ** *******************************************************************************/