Skip to content

Commit 4549d26

Browse files
committed
Fixed NOT_EQUAL implementation
Signed-off-by: Igor PIROG <[email protected]>
1 parent 1d7549f commit 4549d26

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

src/main/java/org/gridsuite/computation/utils/SpecificationUtils.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ public static <X> Specification<X> equals(String field, String value) {
5656
);
5757
}
5858

59+
public static <X> Specification<X> notEqual(String field, String value) {
60+
return (root, cq, cb) -> cb.notEqual(getColumnPath(root, field), value);
61+
}
62+
5963
public static <X> Specification<X> in(String field, List<String> values) {
6064
return (root, cq, cb) ->
6165
cb.upper(getColumnPath(root, field).as(String.class)).in(values);
6266
}
6367

64-
public static <X> Specification<X> notEqual(String field, String value) {
65-
return (root, cq, cb) -> cb.notEqual(getColumnPath(root, field), value);
66-
}
67-
6868
public static <X> Specification<X> contains(String field, String value) {
6969
return (root, cq, cb) -> cb.like(cb.upper(getColumnPath(root, field).as(String.class)), "%" + EscapeCharacter.DEFAULT.escape(value).toUpperCase() + "%", EscapeCharacter.DEFAULT.getEscapeCharacter());
7070
}
@@ -151,13 +151,20 @@ private static <X> Specification<X> appendTextFilterToSpecification(Specificatio
151151
.map(Object::toString)
152152
.map(String::toUpperCase)
153153
.toList();
154-
completedSpecification = completedSpecification.and(generateInSpecification(resourceFilter.column(), inValues)
154+
completedSpecification = completedSpecification.and(
155+
resourceFilter.type() == ResourceFilterDTO.Type.NOT_EQUAL ?
156+
not(generateInSpecification(resourceFilter.column(), inValues)) :
157+
generateInSpecification(resourceFilter.column(), inValues)
155158
);
156159
} else if (resourceFilter.value() == null) {
157160
// if the value is null, we build an impossible specification (trick to remove later on ?)
158161
completedSpecification = completedSpecification.and(not(completedSpecification));
159162
} else {
160-
completedSpecification = completedSpecification.and(equals(resourceFilter.column(), resourceFilter.value().toString()));
163+
completedSpecification = completedSpecification.and(
164+
resourceFilter.type() == ResourceFilterDTO.Type.NOT_EQUAL ?
165+
notEqual(resourceFilter.column(), resourceFilter.value().toString()) :
166+
equals(resourceFilter.column(), resourceFilter.value().toString())
167+
);
161168
}
162169
}
163170
case CONTAINS -> {

src/test/java/org/gridsuite/computation/specification/CommonSpecificationBuilderTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ void testBuildSpecification() {
7979
// test data
8080
List<ResourceFilterDTO> resourceFilters = List.of(
8181
new ResourceFilterDTO(TEXT, EQUALS, "dummyColumnValue", "dummyColumn"),
82+
new ResourceFilterDTO(TEXT, NOT_EQUAL, "dummyColumnValue", "dummyColumn"),
83+
new ResourceFilterDTO(TEXT, NOT_EQUAL, List.of("dummyColumnValue", "otherDummyColumnValue"), "dummyColumn"),
8284
new ResourceFilterDTO(TEXT, STARTS_WITH, "dum", "dummyColumn"),
8385
new ResourceFilterDTO(TEXT, IN, List.of("dummyColumnValue", "otherDummyColumnValue"), "dummyColumn"),
8486
new ResourceFilterDTO(TEXT, IN, tooManyInValues, "dummyColumn"),

0 commit comments

Comments
 (0)