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)) {