Done ticket GEPAFINBE-201 Fixed the issue for filteration on number value as string in application pagination API.

This commit is contained in:
piyushkag
2025-04-02 13:36:25 +05:30
parent c4626a834b
commit e9c72b5463

View File

@@ -826,20 +826,48 @@ public class Utils {
}
public static void applyNumberFilter(Path<?> fieldPath, CriteriaBuilder criteriaBuilder, List<Predicate> 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<Predicate> predicates, Object value, MatchModeEnum matchMode, Root<?> root) {
if (fieldPath.getJavaType().equals(LocalDateTime.class)) {