From a15cb3be05f15748932972b7b2eba92b7189dac0 Mon Sep 17 00:00:00 2001 From: chezard Date: Sat, 2 Nov 2024 07:43:25 +0300 Subject: [PATCH 1/2] fix path to **/target/** --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9f2f0ad..fe85750 100644 --- a/.gitignore +++ b/.gitignore @@ -145,6 +145,6 @@ Desktop.ini ###################### .eslintcache -*/target/** +**/target/** /nexts/ From 50c6f56ef96ad6487724aba0e9529f9cb19b5b25 Mon Sep 17 00:00:00 2001 From: chezard Date: Sat, 2 Nov 2024 07:50:22 +0300 Subject: [PATCH 2/2] add IN and NOT_IN CriteriaOperator --- .../beyt/jdq/dto/enums/CriteriaOperator.java | 4 +++- .../beyt/jdq/query/DynamicQueryManager.java | 2 ++ .../SpecificationFilterInRule.java | 22 +++++++++++++++++++ .../SpecificationFilterNotInRule.java | 22 +++++++++++++++++++ .../presetation/S2_Multi_Value_Operators.java | 19 ++++++++++++++++ 5 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/beyt/jdq/query/rule/specification/SpecificationFilterInRule.java create mode 100644 src/main/java/com/beyt/jdq/query/rule/specification/SpecificationFilterNotInRule.java diff --git a/src/main/java/com/beyt/jdq/dto/enums/CriteriaOperator.java b/src/main/java/com/beyt/jdq/dto/enums/CriteriaOperator.java index 5b54332..b40508e 100644 --- a/src/main/java/com/beyt/jdq/dto/enums/CriteriaOperator.java +++ b/src/main/java/com/beyt/jdq/dto/enums/CriteriaOperator.java @@ -19,7 +19,9 @@ public enum CriteriaOperator implements Serializable { LESS_THAN(10, "Küçüktür"), LESS_THAN_OR_EQUAL(11, "Küçüktür veya eşittir"), OR(12, "Veya (Konulduğu yeri 2 ye Böler) (key ve values önemsizdir)"), - PARENTHES(13, "Sub Criteria"); + PARENTHES(13, "Sub Criteria"), + IN(14, "Birden fazla OR değeri"), + NOT_IN(15, "Birden fazla NOT OR değeri"); private int value = -1; private String meaning; diff --git a/src/main/java/com/beyt/jdq/query/DynamicQueryManager.java b/src/main/java/com/beyt/jdq/query/DynamicQueryManager.java index 6c33918..d7593e0 100644 --- a/src/main/java/com/beyt/jdq/query/DynamicQueryManager.java +++ b/src/main/java/com/beyt/jdq/query/DynamicQueryManager.java @@ -63,6 +63,8 @@ public class DynamicQueryManager { specificationRuleMap.put(CriteriaOperator.LESS_THAN_OR_EQUAL, new SpecificationFilterLessThanOrEqualToRule()); specificationRuleMap.put(CriteriaOperator.OR, null); specificationRuleMap.put(CriteriaOperator.PARENTHES, null); + specificationRuleMap.put(CriteriaOperator.IN, new SpecificationFilterInRule()); + specificationRuleMap.put(CriteriaOperator.NOT_IN, new SpecificationFilterNotInRule()); } public static List findAll(JpaSpecificationExecutor repositoryExecutor, diff --git a/src/main/java/com/beyt/jdq/query/rule/specification/SpecificationFilterInRule.java b/src/main/java/com/beyt/jdq/query/rule/specification/SpecificationFilterInRule.java new file mode 100644 index 0000000..ff82cd9 --- /dev/null +++ b/src/main/java/com/beyt/jdq/query/rule/specification/SpecificationFilterInRule.java @@ -0,0 +1,22 @@ +package com.beyt.jdq.query.rule.specification; + +import com.beyt.jdq.dto.Criteria; +import com.beyt.jdq.util.SpecificationUtil; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.Path; +import jakarta.persistence.criteria.Predicate; +import lombok.extern.slf4j.Slf4j; + +/** + * Created by chezard at 02-Nov-24 + */ +@Slf4j +public class SpecificationFilterInRule implements ISpecificationFilterRule { + + @Override + public Predicate generatePredicate(Path root, CriteriaBuilder builder, Criteria criteria) { + SpecificationUtil.checkHasFirstValue(criteria); + var predicate = root.get(criteria.getKey()).in(criteria.getValues()); + return builder.or(predicate); + } +} diff --git a/src/main/java/com/beyt/jdq/query/rule/specification/SpecificationFilterNotInRule.java b/src/main/java/com/beyt/jdq/query/rule/specification/SpecificationFilterNotInRule.java new file mode 100644 index 0000000..171eacb --- /dev/null +++ b/src/main/java/com/beyt/jdq/query/rule/specification/SpecificationFilterNotInRule.java @@ -0,0 +1,22 @@ +package com.beyt.jdq.query.rule.specification; + +import com.beyt.jdq.dto.Criteria; +import com.beyt.jdq.util.SpecificationUtil; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.Path; +import jakarta.persistence.criteria.Predicate; +import lombok.extern.slf4j.Slf4j; + +/** + * Created by chezard at 02-Nov-24 + */ +@Slf4j +public class SpecificationFilterNotInRule implements ISpecificationFilterRule { + + @Override + public Predicate generatePredicate(Path root, CriteriaBuilder builder, Criteria criteria) { + SpecificationUtil.checkHasFirstValue(criteria); + var predicate = root.get(criteria.getKey()).in(criteria.getValues()).not(); + return builder.or(predicate); + } +} diff --git a/src/test/java/com/beyt/jdq/presetation/S2_Multi_Value_Operators.java b/src/test/java/com/beyt/jdq/presetation/S2_Multi_Value_Operators.java index 4dbfcc1..ec6401e 100644 --- a/src/test/java/com/beyt/jdq/presetation/S2_Multi_Value_Operators.java +++ b/src/test/java/com/beyt/jdq/presetation/S2_Multi_Value_Operators.java @@ -66,4 +66,23 @@ public void notEqualDate() { List courseList = courseRepository.findAll(criteriaList); PresentationUtil.prettyPrint(courseList); } + + @Test + public void in() { + var criteriaList = CriteriaList.of(Criteria.of(Course.Fields.name, CriteriaOperator.IN, "Calculus I", "Calculus II")); + PresentationUtil.prettyPrint(criteriaList); + List courseList = courseRepository.findAll(criteriaList); + PresentationUtil.prettyPrint(courseList);//2,3 + assertEquals(List.of(course2, course3), courseList); + } + + @Test + public void notIn() { + var criteriaList = CriteriaList.of(Criteria.of(Course.Fields.name, CriteriaOperator.NOT_IN, "Calculus I", "Calculus II")); + PresentationUtil.prettyPrint(criteriaList); + List courseList = courseRepository.findAll(criteriaList); + PresentationUtil.prettyPrint(courseList);//1,4,5,6,7,8,9,10 + assertEquals(Arrays.asList(course1, course4, course5, course6, course7, course8, course9, course10), courseList); + } + }