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.NoSuchElementException;
19 import java.util.function.BiPredicate;
20 import java.util.function.Function;
21 import java.util.function.Predicate;
22
23 import org.mybatis.dynamic.sql.AbstractTwoValueCondition;
24
25 public class IsBetween<T> extends AbstractTwoValueCondition<T>
26 implements AbstractTwoValueCondition.Filterable<T>, AbstractTwoValueCondition.Mappable<T> {
27 private static final IsBetween<?> EMPTY = new IsBetween<Object>(-1, -1) {
28 @Override
29 public Object value1() {
30 throw new NoSuchElementException("No value present");
31 }
32
33 @Override
34 public Object value2() {
35 throw new NoSuchElementException("No value present");
36 }
37
38 @Override
39 public boolean isEmpty() {
40 return true;
41 }
42 };
43
44 public static <T> IsBetween<T> empty() {
45 @SuppressWarnings("unchecked")
46 IsBetween<T> t = (IsBetween<T>) EMPTY;
47 return t;
48 }
49
50 protected IsBetween(T value1, T value2) {
51 super(value1, value2);
52 }
53
54 @Override
55 public String operator1() {
56 return "between";
57 }
58
59 @Override
60 public String operator2() {
61 return "and";
62 }
63
64 @Override
65 public IsBetween<T> filter(BiPredicate<? super T, ? super T> predicate) {
66 return filterSupport(predicate, IsBetween::empty, this);
67 }
68
69 @Override
70 public IsBetween<T> filter(Predicate<? super T> predicate) {
71 return filterSupport(predicate, IsBetween::empty, this);
72 }
73
74 @Override
75 public <R> IsBetween<R> map(Function<? super T, ? extends R> mapper1,
76 Function<? super T, ? extends R> mapper2) {
77 return mapSupport(mapper1, mapper2, IsBetween::new, IsBetween::empty);
78 }
79
80 @Override
81 public <R> IsBetween<R> map(Function<? super T, ? extends R> mapper) {
82 return map(mapper, mapper);
83 }
84
85 public static <T> Builder<T> isBetween(T value1) {
86 return new Builder<>(value1);
87 }
88
89 public static class Builder<T> extends AndGatherer<T, IsBetween<T>> {
90 private Builder(T value1) {
91 super(value1);
92 }
93
94 @Override
95 protected IsBetween<T> build(T value2) {
96 return new IsBetween<>(value1, value2);
97 }
98 }
99 }