1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.where.condition;
17
18 import java.util.Arrays;
19 import java.util.Collection;
20 import java.util.Collections;
21 import java.util.function.Function;
22 import java.util.function.Predicate;
23
24 import org.jspecify.annotations.NonNull;
25 import org.mybatis.dynamic.sql.AbstractListValueCondition;
26 import org.mybatis.dynamic.sql.render.RenderingContext;
27 import org.mybatis.dynamic.sql.util.StringUtilities;
28 import org.mybatis.dynamic.sql.util.Validator;
29
30 public class IsInCaseInsensitive<T> extends AbstractListValueCondition<T>
31 implements CaseInsensitiveRenderableCondition<T>, AbstractListValueCondition.Filterable<T>,
32 AbstractListValueCondition.Mappable<T> {
33 private static final IsInCaseInsensitive<?> EMPTY = new IsInCaseInsensitive<>(Collections.emptyList());
34
35 public static <T> IsInCaseInsensitive<T> empty() {
36 @SuppressWarnings("unchecked")
37 IsInCaseInsensitive<T> t = (IsInCaseInsensitive<T>) EMPTY;
38 return t;
39 }
40
41 protected IsInCaseInsensitive(Collection<T> values) {
42 super(values.stream().map(StringUtilities::upperCaseIfPossible).toList());
43 }
44
45 @Override
46 public boolean shouldRender(RenderingContext renderingContext) {
47 Validator.assertNotEmpty(values, "ERROR.44", "IsInCaseInsensitive");
48 return true;
49 }
50
51 @Override
52 public String operator() {
53 return "in";
54 }
55
56 @Override
57 public IsInCaseInsensitive<T> filter(Predicate<? super @NonNull T> predicate) {
58 return filterSupport(predicate, IsInCaseInsensitive::new, this, IsInCaseInsensitive::empty);
59 }
60
61 @Override
62 public <R> IsInCaseInsensitive<R> map(Function<? super @NonNull T, ? extends @NonNull R> mapper) {
63 return mapSupport(mapper, IsInCaseInsensitive::new, IsInCaseInsensitive::empty);
64 }
65
66 @SafeVarargs
67 public static <T> IsInCaseInsensitive<T> of(T... values) {
68 return of(Arrays.asList(values));
69 }
70
71 public static <T> IsInCaseInsensitive<T> of(Collection<T> values) {
72 return new IsInCaseInsensitive<>(values);
73 }
74 }