diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 1c31a2c7..efd6bcda 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -426,10 +426,7 @@ public class GepafinConstant { public static final String APPOINTMENT_CANNOT_BE_CREATED = "appointment.cannot.be.created"; public static final String APPOINTMENT_NOT_CREATED = "appointment.not.created"; - public static final String CONTAINS = "contains"; - public static final String EQUALS = "equals"; - public static final String STARTS_WITH = "starts_with"; - public static final String ENDS_WITH = "ends_with"; + public static final String CALL_TITLE = "callTitle"; public static final String CALL_ID="callId"; public static final String CALL_END_DATE="callEndDate"; @@ -440,8 +437,7 @@ public class GepafinConstant { public static final String CALL_END_TIME="callEndTime"; public static final String END_TIME="endTime"; public static final String UPDATED_DATE="updatedDate"; - public static final String BEFORE="before"; - public static final String AFTER="after"; + } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index d749897b..205ff89a 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -1585,7 +1585,7 @@ public class ApplicationDao { String fieldName = entry.getKey(); FilterCriteria filterCriteria = entry.getValue(); Object value = filterCriteria.getValue(); - String matchMode = filterCriteria.getMatchMode(); + MatchModeEnum matchMode = filterCriteria.getMatchMode(); if (value != null && matchMode != null) { Path fieldPath = getFieldPath(root, fieldName); @@ -1599,47 +1599,51 @@ public class ApplicationDao { } } - private void applyStringFilter(Path fieldPath, CriteriaBuilder criteriaBuilder, List predicates, Object value, String matchMode) { + private void applyStringFilter(Path fieldPath, CriteriaBuilder criteriaBuilder, List predicates, Object value, MatchModeEnum matchMode) { if (value instanceof String) { String valueStr = (String) value; if (fieldPath.getJavaType().equals(String.class)) { - switch (matchMode.toLowerCase()) { - case GepafinConstant.CONTAINS -> + MatchModeEnum mode = MatchModeEnum.valueOf(matchMode.getValue()); + switch (mode) { + case CONTAINS -> predicates.add(criteriaBuilder.like(criteriaBuilder.lower(fieldPath.as(String.class)), "%" + valueStr.toLowerCase() + "%")); - case GepafinConstant.EQUALS -> predicates.add(criteriaBuilder.equal(fieldPath, valueStr)); - case GepafinConstant.STARTS_WITH -> + case EQUALS -> predicates.add(criteriaBuilder.equal(fieldPath, valueStr)); + case STARTSWITH -> predicates.add(criteriaBuilder.like(criteriaBuilder.lower(fieldPath.as(String.class)), valueStr.toLowerCase() + "%")); - case GepafinConstant.ENDS_WITH -> + case ENDSWITH -> predicates.add(criteriaBuilder.like(criteriaBuilder.lower(fieldPath.as(String.class)), "%" + valueStr.toLowerCase())); } } } } - private void applyNumberFilter(Path fieldPath, CriteriaBuilder criteriaBuilder, List predicates, Object value, String matchMode) { + private 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; } - switch (matchMode.toLowerCase()) { - case GepafinConstant.EQUALS -> predicates.add(criteriaBuilder.equal(fieldPath, numberValue)); + MatchModeEnum mode = MatchModeEnum.valueOf(matchMode.getValue()); + switch (mode) { + case EQUALS -> predicates.add(criteriaBuilder.equal(fieldPath, numberValue)); } } } /* -private void applyDateFilter(Path fieldPath, CriteriaBuilder criteriaBuilder, List predicates, Object value, String matchMode) { +private void applyDateFilter(Path fieldPath, CriteriaBuilder criteriaBuilder, List predicates, Object value, MatchModeEnum matchMode) { if (fieldPath.getJavaType().equals(LocalDateTime.class)) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); LocalDateTime dateValue = LocalDateTime.parse(value.toString(), formatter); Expression fieldAsString = criteriaBuilder.function("TO_CHAR", String.class, fieldPath, criteriaBuilder.literal("YYYY-MM-DD HH24:MI:SS.MS")); - switch (matchMode.toLowerCase()) { - case GepafinConstant.EQUALS -> predicates.add(criteriaBuilder.equal(fieldAsString, value.toString())); - case GepafinConstant.BEFORE -> predicates.add(criteriaBuilder.lessThan(fieldPath.as(LocalDateTime.class), dateValue)); - case GepafinConstant.AFTER -> predicates.add(criteriaBuilder.greaterThan(fieldPath.as(LocalDateTime.class), dateValue)); + MatchModeEnum mode = MatchModeEnum.valueOf(matchMode.getValue()); + switch (mode) { + + case EQUALS -> predicates.add(criteriaBuilder.equal(fieldAsString, value.toString())); + case BEFORE -> predicates.add(criteriaBuilder.lessThan(fieldPath.as(LocalDateTime.class), dateValue)); + case AFTER -> predicates.add(criteriaBuilder.greaterThan(fieldPath.as(LocalDateTime.class), dateValue)); } } } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/MatchModeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/MatchModeEnum.java new file mode 100644 index 00000000..dc2383c0 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/enums/MatchModeEnum.java @@ -0,0 +1,25 @@ +package net.gepafin.tendermanagement.enums; + +import com.fasterxml.jackson.annotation.JsonValue; + + +public enum MatchModeEnum { + STARTSWITH("STARTSWITH"), + ENDSWITH("ENDSWITH"), + CONTAINS("CONTAINS"), + EQUALS("EQUALS"), + BEFORE("BEFORE"), + AFTER("AFTER"), + EXPIRED("EXPIRED"); + + private String value; + + MatchModeEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/FilterCriteria.java b/src/main/java/net/gepafin/tendermanagement/model/request/FilterCriteria.java index df7eaf69..25690086 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/FilterCriteria.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/FilterCriteria.java @@ -1,10 +1,11 @@ package net.gepafin.tendermanagement.model.request; import lombok.Data; +import net.gepafin.tendermanagement.enums.MatchModeEnum; @Data public class FilterCriteria { private Object value; - private String matchMode; + private MatchModeEnum matchMode; }