From a58b05b4a31f4acd184b127faacab6ead574acbb Mon Sep 17 00:00:00 2001 From: Sam Bishop Date: Thu, 27 Jul 2023 09:37:47 -0400 Subject: [PATCH 1/4] Sort parameters before diff in IBaseDataObjectDiffHelper --- .../core/IBaseDataObjectDiffHelper.java | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/src/main/java/emissary/core/IBaseDataObjectDiffHelper.java b/src/main/java/emissary/core/IBaseDataObjectDiffHelper.java index 1311aa0f09..bfe61d56b3 100644 --- a/src/main/java/emissary/core/IBaseDataObjectDiffHelper.java +++ b/src/main/java/emissary/core/IBaseDataObjectDiffHelper.java @@ -11,8 +11,11 @@ import java.nio.channels.SeekableByteChannel; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Objects; public class IBaseDataObjectDiffHelper { @@ -25,7 +28,7 @@ private IBaseDataObjectDiffHelper() {} /** * This method compares two IBaseDataObject's and adds any differences to the provided string list. - * + * * @param ibdo1 the first IBaseDataObject to compare. * @param ibdo2 the second IBaseDataObject to compare. * @param differences the string list differences are to be added to. @@ -56,7 +59,7 @@ public static void diff(final IBaseDataObject ibdo1, final IBaseDataObject ibdo2 } diff(ibdo1.getFontEncoding(), ibdo2.getFontEncoding(), "fontEncoding", differences); - diff(ibdo1.getParameters(), ibdo2.getParameters(), "parameters", differences); + diff(sortParameters(ibdo1.getParameters()), sortParameters(ibdo2.getParameters()), "parameters", differences); diff(ibdo1.getNumChildren(), ibdo2.getNumChildren(), "numChildren", differences); diff(ibdo1.getNumSiblings(), ibdo2.getNumSiblings(), "numSiblings", differences); diff(ibdo1.getBirthOrder(), ibdo2.getBirthOrder(), "birthOrder", differences); @@ -83,7 +86,7 @@ public static void diff(final IBaseDataObject ibdo1, final IBaseDataObject ibdo2 /** * This method compares two lists of IBaseDataObject's and adds any differences to the provided string list. - * + * * @param ibdoList1 the first list of IBaseDataObjects to compare. * @param ibdoList2 the second list of IBaseDataObjects to compare. * @param identifier a string that helps identify the context of comparing these two list of IBaseDataObjects. @@ -118,7 +121,7 @@ public static void diff(final List ibdoList1, final List map1, final Map> sortParameters(Map> parameters) { + List>> list = new ArrayList<>(parameters.entrySet()); + list.sort(Entry.comparingByKey()); + + Map> sortedParams = new HashMap<>(); + for (Entry> curParam : list) { + sortedParams.put(curParam.getKey(), curParam.getValue()); + } + + return sortedParams; + } } From bcf329c1af7e9d7a00bf021aab34aa2fbe469f82 Mon Sep 17 00:00:00 2001 From: Sam Bishop Date: Thu, 27 Jul 2023 14:34:04 -0400 Subject: [PATCH 2/4] Updates to sort params in ibdodiffhelper and add test --- .../core/IBaseDataObjectDiffHelper.java | 26 +++---------------- .../core/IBaseDataObjectDiffHelperTest.java | 25 +++++++++++++----- 2 files changed, 21 insertions(+), 30 deletions(-) diff --git a/src/main/java/emissary/core/IBaseDataObjectDiffHelper.java b/src/main/java/emissary/core/IBaseDataObjectDiffHelper.java index bfe61d56b3..6c7823ca79 100644 --- a/src/main/java/emissary/core/IBaseDataObjectDiffHelper.java +++ b/src/main/java/emissary/core/IBaseDataObjectDiffHelper.java @@ -11,12 +11,10 @@ import java.nio.channels.SeekableByteChannel; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Objects; +import java.util.TreeMap; public class IBaseDataObjectDiffHelper { @@ -59,7 +57,8 @@ public static void diff(final IBaseDataObject ibdo1, final IBaseDataObject ibdo2 } diff(ibdo1.getFontEncoding(), ibdo2.getFontEncoding(), "fontEncoding", differences); - diff(sortParameters(ibdo1.getParameters()), sortParameters(ibdo2.getParameters()), "parameters", differences); + // TreeMap automatically sorts parameters by key + diff(new TreeMap<>(ibdo1.getParameters()), new TreeMap<>(ibdo2.getParameters()), "parameters", differences); diff(ibdo1.getNumChildren(), ibdo2.getNumChildren(), "numChildren", differences); diff(ibdo1.getNumSiblings(), ibdo2.getNumSiblings(), "numSiblings", differences); diff(ibdo1.getBirthOrder(), ibdo2.getBirthOrder(), "birthOrder", differences); @@ -225,23 +224,4 @@ public static void diff(final Map map1, final Map> sortParameters(Map> parameters) { - List>> list = new ArrayList<>(parameters.entrySet()); - list.sort(Entry.comparingByKey()); - - Map> sortedParams = new HashMap<>(); - for (Entry> curParam : list) { - sortedParams.put(curParam.getKey(), curParam.getValue()); - } - - return sortedParams; - } } diff --git a/src/test/java/emissary/core/IBaseDataObjectDiffHelperTest.java b/src/test/java/emissary/core/IBaseDataObjectDiffHelperTest.java index 7d7a98b2ad..034dd8e3e8 100644 --- a/src/test/java/emissary/core/IBaseDataObjectDiffHelperTest.java +++ b/src/test/java/emissary/core/IBaseDataObjectDiffHelperTest.java @@ -12,14 +12,9 @@ import java.nio.ByteBuffer; import java.nio.channels.SeekableByteChannel; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.List; +import java.util.*; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.*; class IBaseDataObjectDiffHelperTest { @@ -294,4 +289,20 @@ void testDiffList() { ibdo2.setClassification("classification"); verifyDiffList(1, ibdoList1, ibdoList2); } + + @Test + void testParamSort() { + // set-up + Set expectedParams = new HashSet<>(); + expectedParams.add("LIST"); + expectedParams.add("STRING"); + expectedParams.add("TEST"); + ibdo1.putParameter("STRING", "string"); + ibdo1.putParameter("TEST", "test"); + ibdo1.putParameter("LIST", Arrays.asList("first", "second", "third")); + + // test + TreeMap> sortedParams = new TreeMap<>(ibdo1.getParameters()); + assertEquals(expectedParams, sortedParams.keySet(), "parameters should be sorted in natural order of keys"); + } } From 558619550a590a3559723401278cc6d893c0a99d Mon Sep 17 00:00:00 2001 From: Sam Bishop Date: Thu, 27 Jul 2023 14:36:54 -0400 Subject: [PATCH 3/4] Remove * imports --- .../core/IBaseDataObjectDiffHelperTest.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/test/java/emissary/core/IBaseDataObjectDiffHelperTest.java b/src/test/java/emissary/core/IBaseDataObjectDiffHelperTest.java index 034dd8e3e8..9533f75a87 100644 --- a/src/test/java/emissary/core/IBaseDataObjectDiffHelperTest.java +++ b/src/test/java/emissary/core/IBaseDataObjectDiffHelperTest.java @@ -12,9 +12,18 @@ import java.nio.ByteBuffer; import java.nio.channels.SeekableByteChannel; import java.nio.charset.StandardCharsets; -import java.util.*; - -import static org.junit.jupiter.api.Assertions.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.TreeMap; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; class IBaseDataObjectDiffHelperTest { From 3eba50dd8658ee70a5344efa4b6949af8def6504 Mon Sep 17 00:00:00 2001 From: Sam Bishop Date: Fri, 28 Jul 2023 13:45:03 -0400 Subject: [PATCH 4/4] Changing HashSet to TreeSet in testParamSort --- .../java/emissary/core/IBaseDataObjectDiffHelperTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/emissary/core/IBaseDataObjectDiffHelperTest.java b/src/test/java/emissary/core/IBaseDataObjectDiffHelperTest.java index 9533f75a87..2eeade7ddc 100644 --- a/src/test/java/emissary/core/IBaseDataObjectDiffHelperTest.java +++ b/src/test/java/emissary/core/IBaseDataObjectDiffHelperTest.java @@ -17,10 +17,10 @@ import java.util.Collection; import java.util.Date; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.TreeMap; +import java.util.TreeSet; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -302,7 +302,7 @@ void testDiffList() { @Test void testParamSort() { // set-up - Set expectedParams = new HashSet<>(); + Set expectedParams = new TreeSet<>(); expectedParams.add("LIST"); expectedParams.add("STRING"); expectedParams.add("TEST");