1
1
package io .kestra .core .models ;
2
2
3
+ import com .fasterxml .jackson .annotation .JsonCreator ;
4
+ import com .fasterxml .jackson .annotation .JsonProperty ;
5
+ import com .fasterxml .jackson .annotation .JsonValue ;
6
+ import io .kestra .core .models .dashboards .filters .*;
3
7
import io .kestra .core .utils .Enums ;
4
8
import lombok .Builder ;
5
9
6
- import java .util .*;
10
+ import java .util .Arrays ;
11
+ import java .util .List ;
12
+ import java .util .Map ;
7
13
import java .util .function .Function ;
8
14
import java .util .stream .Collectors ;
9
15
@@ -13,33 +19,63 @@ public record QueryFilter(
13
19
Op operation ,
14
20
Object value
15
21
) {
16
- public enum Op {
17
- EQUALS ("$eq" ),
18
- NOT_EQUALS ("$ne" ),
19
- GREATER_THAN ("$gte" ),
20
- LESS_THAN ("$lte" ),
21
- IN ("$in" ),
22
- NOT_IN ("$notIn" ),
23
- STARTS_WITH ("$startsWith" ),
24
- ENDS_WITH ("$endsWith" ),
25
- CONTAINS ("$contains" ),
26
- REGEX ("$regex" );
27
-
28
- private static final Map <String , Op > BY_VALUE = Arrays .stream (values ())
29
- .collect (Collectors .toMap (Op ::value , Function .identity ()));
30
22
31
- private final String value ;
23
+ @ JsonCreator
24
+ public QueryFilter (
25
+ @ JsonProperty ("field" ) Field field ,
26
+ @ JsonProperty ("operation" ) Op operation ,
27
+ @ JsonProperty ("value" ) Object value
28
+ ) {
29
+ this .field = field ;
30
+ this .operation = operation ;
31
+ this .value = value ;
32
+ }
32
33
33
- Op (String value ) {
34
- this .value = value ;
35
- }
34
+ public enum Op {
35
+ EQUALS ,
36
+ NOT_EQUALS ,
37
+ GREATER_THAN ,
38
+ LESS_THAN ,
39
+ GREATER_THAN_OR_EQUAL_TO ,
40
+ LESS_THAN_OR_EQUAL_TO ,
41
+ IN ,
42
+ NOT_IN ,
43
+ STARTS_WITH ,
44
+ ENDS_WITH ,
45
+ CONTAINS ,
46
+ REGEX ;
47
+ }
36
48
37
- public static Op fromString (String value ) {
38
- return Enums .fromString (value , BY_VALUE , "operation" );
39
- }
40
49
41
- public String value () {
42
- return value ;
50
+ @ SuppressWarnings ("unchecked" )
51
+ public <T extends Enum <T >> AbstractFilter <T > toDashboardFilterBuilder (T field , Object value ) {
52
+ switch (this .operation ) {
53
+ case EQUALS :
54
+ return EqualTo .<T >builder ().field (field ).value (value ).build ();
55
+ case NOT_EQUALS :
56
+ return NotEqualTo .<T >builder ().field (field ).value (value ).build ();
57
+ case GREATER_THAN :
58
+ return GreaterThan .<T >builder ().field (field ).value (value ).build ();
59
+ case LESS_THAN :
60
+ return LessThan .<T >builder ().field (field ).value (value ).build ();
61
+ case GREATER_THAN_OR_EQUAL_TO :
62
+ return GreaterThanOrEqualTo .<T >builder ().field (field ).value (value ).build ();
63
+ case LESS_THAN_OR_EQUAL_TO :
64
+ return LessThanOrEqualTo .<T >builder ().field (field ).value (value ).build ();
65
+ case IN :
66
+ return In .<T >builder ().field (field ).values ((List <Object >) value ).build ();
67
+ case NOT_IN :
68
+ return NotIn .<T >builder ().field (field ).values ((List <Object >) value ).build ();
69
+ case STARTS_WITH :
70
+ return StartsWith .<T >builder ().field (field ).value (value .toString ()).build ();
71
+ case ENDS_WITH :
72
+ return EndsWith .<T >builder ().field (field ).value (value .toString ()).build ();
73
+ case CONTAINS :
74
+ return Contains .<T >builder ().field (field ).value (value .toString ()).build ();
75
+ case REGEX :
76
+ return Regex .<T >builder ().field (field ).value (value .toString ()).build ();
77
+ default :
78
+ throw new IllegalArgumentException ("Unsupported operation: " + this .operation );
43
79
}
44
80
}
45
81
@@ -147,16 +183,17 @@ public List<Op> supportedOp() {
147
183
this .value = value ;
148
184
}
149
185
186
+ @ JsonCreator
150
187
public static Field fromString (String value ) {
151
188
return Enums .fromString (value , BY_VALUE , "field" );
152
189
}
153
190
191
+ @ JsonValue
154
192
public String value () {
155
193
return value ;
156
194
}
157
195
}
158
196
159
-
160
197
public enum Resource {
161
198
FLOW {
162
199
@ Override
@@ -239,12 +276,17 @@ private static FieldOp toFieldInfo(Field field) {
239
276
}
240
277
241
278
private static Operation toOperation (Op op ) {
242
- return new Operation (op .name (), op .value ());
279
+ return new Operation (op .name (), op .name ());
243
280
}
244
281
}
245
282
246
- public record ResourceField (String name , List <FieldOp > fields ) {}
247
- public record FieldOp (String name , String value , List <Operation > operations ) {}
248
- public record Operation (String name , String value ) {}
283
+ public record ResourceField (String name , List <FieldOp > fields ) {
284
+ }
285
+
286
+ public record FieldOp (String name , String value , List <Operation > operations ) {
287
+ }
288
+
289
+ public record Operation (String name , String value ) {
290
+ }
249
291
250
292
}
0 commit comments