From e9c72b5463e000ad0fe6e7046f59928b3d194c09 Mon Sep 17 00:00:00 2001 From: piyushkag Date: Wed, 2 Apr 2025 13:36:25 +0530 Subject: [PATCH] Done ticket GEPAFINBE-201 Fixed the issue for filteration on number value as string in application pagination API. --- .../gepafin/tendermanagement/util/Utils.java | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/util/Utils.java b/src/main/java/net/gepafin/tendermanagement/util/Utils.java index 93af188d..51091508 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/Utils.java +++ b/src/main/java/net/gepafin/tendermanagement/util/Utils.java @@ -826,20 +826,48 @@ public class Utils { } public static void applyNumberFilter(Path fieldPath, CriteriaBuilder criteriaBuilder, List predicates, Object value, MatchModeEnum matchMode) { + if (Number.class.isAssignableFrom(fieldPath.getJavaType())) { Number numberValue = null; - if (value instanceof Number) { - numberValue = (Number) value; + + if (value instanceof String stringValue) { + if (isInteger(stringValue)) { + numberValue = Long.parseLong(stringValue); + } else if (isDecimal(stringValue)) { + numberValue = Double.parseDouble(stringValue); + } + } else if (value instanceof Number number) { + numberValue = number; } - MatchModeEnum mode = MatchModeEnum.fromObject(matchMode.getValue()); - switch (mode) { - case EQUALS -> predicates.add(criteriaBuilder.equal(fieldPath, numberValue)); + if (numberValue != null) { + MatchModeEnum mode = MatchModeEnum.fromObject(matchMode.getValue()); + + if (mode == MatchModeEnum.EQUALS) { + predicates.add(criteriaBuilder.equal(fieldPath, numberValue)); + } } } } + private static boolean isInteger(String value) { + try { + Long.parseLong(value); + return true; + } catch (NumberFormatException e) { + return false; + } + } + private static boolean isDecimal(String value) { + + try { + Double.parseDouble(value); + return value.contains("."); + } catch (NumberFormatException e) { + return false; + } + } public static void applyDateFilter(Path fieldPath, CriteriaBuilder criteriaBuilder, List predicates, Object value, MatchModeEnum matchMode, Root root) { if (fieldPath.getJavaType().equals(LocalDateTime.class)) {