42
42
*
43
43
* @author Christoph Strobl
44
44
* @author Tom Van Wemmel
45
+ * @author Mark Paluch
45
46
* @since 3.3
46
47
*/
47
48
public class PredicateQueryCreator extends AbstractQueryCreator <KeyValueQuery <Predicate <?>>, Predicate <?>> {
@@ -55,68 +56,47 @@ public PredicateQueryCreator(PartTree tree, ParameterAccessor parameters) {
55
56
@ Override
56
57
protected Predicate <?> create (Part part , Iterator <Object > iterator ) {
57
58
58
- switch (part .getType ()) {
59
- case TRUE :
60
- return PredicateBuilder .propertyValueOf (part ).isTrue ();
61
- case FALSE :
62
- return PredicateBuilder .propertyValueOf (part ).isFalse ();
63
- case SIMPLE_PROPERTY :
64
- return PredicateBuilder .propertyValueOf (part ).isEqualTo (iterator .next ());
65
- case NEGATING_SIMPLE_PROPERTY :
66
- return PredicateBuilder .propertyValueOf (part ).isEqualTo (iterator .next ()).negate ();
67
- case IS_NULL :
68
- return PredicateBuilder .propertyValueOf (part ).isNull ();
69
- case IS_NOT_NULL :
70
- return PredicateBuilder .propertyValueOf (part ).isNotNull ();
71
- case LIKE :
72
- return PredicateBuilder .propertyValueOf (part ).contains (iterator .next ());
73
- case NOT_LIKE :
74
- return PredicateBuilder .propertyValueOf (part ).contains (iterator .next ()).negate ();
75
- case STARTING_WITH :
76
- return PredicateBuilder .propertyValueOf (part ).startsWith (iterator .next ());
77
- case AFTER :
78
- case GREATER_THAN :
79
- return PredicateBuilder .propertyValueOf (part ).isGreaterThan (iterator .next ());
80
- case GREATER_THAN_EQUAL :
81
- return PredicateBuilder .propertyValueOf (part ).isGreaterThanEqual (iterator .next ());
82
- case BEFORE :
83
- case LESS_THAN :
84
- return PredicateBuilder .propertyValueOf (part ).isLessThan (iterator .next ());
85
- case LESS_THAN_EQUAL :
86
- return PredicateBuilder .propertyValueOf (part ).isLessThanEqual (iterator .next ());
87
- case ENDING_WITH :
88
- return PredicateBuilder .propertyValueOf (part ).endsWith (iterator .next ());
89
- case BETWEEN :
90
- return PredicateBuilder .propertyValueOf (part ).isGreaterThan (iterator .next ())
91
- .and (PredicateBuilder .propertyValueOf (part ).isLessThan (iterator .next ()));
92
- case REGEX :
93
- return PredicateBuilder .propertyValueOf (part ).matches (iterator .next ());
94
- case IN :
95
- return PredicateBuilder .propertyValueOf (part ).in (iterator .next ());
96
- case NOT_IN :
97
- return PredicateBuilder .propertyValueOf (part ).in (iterator .next ()).negate ();
98
- default :
59
+ PredicateBuilder builder = PredicateBuilder .propertyValueOf (part );
60
+
61
+ return switch (part .getType ()) {
62
+ case TRUE -> builder .isTrue ();
63
+ case FALSE -> builder .isFalse ();
64
+ case SIMPLE_PROPERTY -> builder .isEqualTo (iterator .next ());
65
+ case NEGATING_SIMPLE_PROPERTY -> builder .isEqualTo (iterator .next ()).negate ();
66
+ case IS_NULL -> builder .isNull ();
67
+ case IS_NOT_NULL -> builder .isNotNull ();
68
+ case LIKE -> builder .contains (iterator .next ());
69
+ case NOT_LIKE -> builder .contains (iterator .next ()).negate ();
70
+ case STARTING_WITH -> builder .startsWith (iterator .next ());
71
+ case AFTER , GREATER_THAN -> builder .isGreaterThan (iterator .next ());
72
+ case GREATER_THAN_EQUAL -> builder .isGreaterThanEqual (iterator .next ());
73
+ case BEFORE , LESS_THAN -> builder .isLessThan (iterator .next ());
74
+ case LESS_THAN_EQUAL -> builder .isLessThanEqual (iterator .next ());
75
+ case ENDING_WITH -> builder .endsWith (iterator .next ());
76
+ case BETWEEN -> builder .isGreaterThan (iterator .next ()).and (builder .isLessThan (iterator .next ()));
77
+ case REGEX -> builder .matches (iterator .next ());
78
+ case IN -> builder .in (iterator .next ());
79
+ case NOT_IN -> builder .in (iterator .next ()).negate ();
80
+ default ->
99
81
throw new InvalidDataAccessApiUsageException (String .format ("Found invalid part '%s' in query" , part .getType ()));
100
-
101
- }
82
+ };
102
83
}
103
84
104
85
@ Override
86
+ @ SuppressWarnings ({ "unchecked" , "rawtypes" })
105
87
protected Predicate <?> and (Part part , Predicate <?> base , Iterator <Object > iterator ) {
106
88
return base .and ((Predicate ) create (part , iterator ));
107
89
}
108
90
109
91
@ Override
92
+ @ SuppressWarnings ({ "unchecked" , "rawtypes" })
110
93
protected Predicate <?> or (Predicate <?> base , Predicate <?> criteria ) {
111
94
return base .or ((Predicate ) criteria );
112
95
}
113
96
114
97
@ Override
115
98
protected KeyValueQuery <Predicate <?>> complete (@ Nullable Predicate <?> criteria , Sort sort ) {
116
- if (criteria == null ) {
117
- return new KeyValueQuery <>(it -> true , sort );
118
- }
119
- return new KeyValueQuery <>(criteria , sort );
99
+ return criteria == null ? new KeyValueQuery <>(it -> true , sort ) : new KeyValueQuery <>(criteria , sort );
120
100
}
121
101
122
102
static class PredicateBuilder {
@@ -127,6 +107,7 @@ public PredicateBuilder(Part part) {
127
107
this .part = part ;
128
108
}
129
109
110
+ @ SuppressWarnings ("unchecked" )
130
111
static <T > Comparator <T > comparator () {
131
112
return (Comparator <T >) COMPARATOR ;
132
113
}
@@ -165,19 +146,19 @@ public Predicate<Object> isNotNull() {
165
146
}
166
147
167
148
public Predicate <Object > isLessThan (Object value ) {
168
- return new ValueComparingPredicate (part .getProperty (), o -> comparator ().compare (o , value ) == - 1 ? true : false );
149
+ return new ValueComparingPredicate (part .getProperty (), o -> comparator ().compare (o , value ) < 0 );
169
150
}
170
151
171
152
public Predicate <Object > isLessThanEqual (Object value ) {
172
- return new ValueComparingPredicate (part .getProperty (), o -> comparator ().compare (o , value ) <= 0 ? true : false );
153
+ return new ValueComparingPredicate (part .getProperty (), o -> comparator ().compare (o , value ) <= 0 );
173
154
}
174
155
175
156
public Predicate <Object > isGreaterThan (Object value ) {
176
- return new ValueComparingPredicate (part .getProperty (), o -> comparator ().compare (o , value ) == 1 ? true : false );
157
+ return new ValueComparingPredicate (part .getProperty (), o -> comparator ().compare (o , value ) > 0 );
177
158
}
178
159
179
160
public Predicate <Object > isGreaterThanEqual (Object value ) {
180
- return new ValueComparingPredicate (part .getProperty (), o -> comparator ().compare (o , value ) >= 0 ? true : false );
161
+ return new ValueComparingPredicate (part .getProperty (), o -> comparator ().compare (o , value ) >= 0 );
181
162
}
182
163
183
164
public Predicate <Object > matches (Pattern pattern ) {
@@ -217,8 +198,9 @@ public Predicate<Object> in(Object value) {
217
198
if (value instanceof Collection <?> collection ) {
218
199
219
200
if (o instanceof Collection <?> subSet ) {
220
- collection .containsAll (subSet );
201
+ return collection .containsAll (subSet );
221
202
}
203
+
222
204
return collection .contains (o );
223
205
}
224
206
if (ObjectUtils .isArray (value )) {
@@ -246,7 +228,7 @@ public Predicate<Object> contains(Object value) {
246
228
}
247
229
248
230
if (o instanceof Map <?, ?> map ) {
249
- return map .values (). contains (value );
231
+ return map .containsValue (value );
250
232
}
251
233
252
234
if (value == null ) {
0 commit comments