From 28a473a4e91b0cdc0b876d8c7f8012708a449738 Mon Sep 17 00:00:00 2001 From: georgweiss Date: Wed, 13 Aug 2025 13:39:36 +0200 Subject: [PATCH] Support delta value sorting on string PVs --- .../java/org/phoebus/saveandrestore/util/Utilities.java | 6 ++---- .../java/org/phoebus/saveandrestore/util/UtilitiesTest.java | 3 ++- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/save-and-restore/util/src/main/java/org/phoebus/saveandrestore/util/Utilities.java b/app/save-and-restore/util/src/main/java/org/phoebus/saveandrestore/util/Utilities.java index c66369bff1..082bc4a192 100644 --- a/app/save-and-restore/util/src/main/java/org/phoebus/saveandrestore/util/Utilities.java +++ b/app/save-and-restore/util/src/main/java/org/phoebus/saveandrestore/util/Utilities.java @@ -663,11 +663,10 @@ public static VTypeComparison valueToCompareString(VType value, VType baseValue, int diff = b == null ? (c == null ? 0 : 1) : (c == null ? -1 : b.compareTo(c)); return new VTypeComparison(str, diff, diff == 0); } else if (value instanceof VString && baseValue instanceof VString) { - String str = valueToString(value); String b = ((VString) value).getValue(); String c = ((VString) baseValue).getValue(); int diff = b == null ? (c == null ? 0 : 1) : (c == null ? -1 : b.compareTo(c)); - return new VTypeComparison(str, diff, diff == 0); + return new VTypeComparison(b, diff,diff == 0, Math.abs(diff)); } else if (value instanceof VNumberArray && baseValue instanceof VNumberArray) { String sb = valueToString(value); boolean equal = areValuesEqual(value, baseValue, Optional.empty()); @@ -873,11 +872,10 @@ public static VTypeComparison deltaValueToString(VType value, VType baseValue, O int diff = b == null ? (c == null ? 0 : 1) : (c == null ? -1 : b.compareTo(c)); return new VTypeComparison(str, diff, diff == 0); } else if (value instanceof VString && baseValue instanceof VString) { - String str = valueToString(value); String b = ((VString) value).getValue(); String c = ((VString) baseValue).getValue(); int diff = b == null ? (c == null ? 0 : 1) : (c == null ? -1 : b.compareTo(c)); - return new VTypeComparison(str, diff, diff == 0); + return new VTypeComparison(b, diff, diff == 0, Math.abs(diff)); } else if (value instanceof VNumberArray && baseValue instanceof VNumberArray) { boolean equal = areValuesEqual(value, baseValue, Optional.empty()); return new VTypeComparison(equal ? "---" : "NOT EQUAL", equal ? 0 : 1, equal); diff --git a/app/save-and-restore/util/src/test/java/org/phoebus/saveandrestore/util/UtilitiesTest.java b/app/save-and-restore/util/src/test/java/org/phoebus/saveandrestore/util/UtilitiesTest.java index acd666f1ec..7996343335 100644 --- a/app/save-and-restore/util/src/test/java/org/phoebus/saveandrestore/util/UtilitiesTest.java +++ b/app/save-and-restore/util/src/test/java/org/phoebus/saveandrestore/util/UtilitiesTest.java @@ -702,7 +702,8 @@ public void testValueToCompareString() { assertEquals("a", result.getString()); assertTrue(result.getValuesEqual() < 0); assertFalse(result.isWithinThreshold()); - assertEquals(0, result.getAbsoluteDelta(), 0.0); + int delta = ((VString) val1).getValue().compareTo(((VString) val2).getValue()); + assertEquals(Math.abs(delta), result.getAbsoluteDelta(), 0.0); } /**