1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.util;
17
18 import java.util.Objects;
19 import java.util.Optional;
20 import java.util.function.Supplier;
21
22 import org.jspecify.annotations.Nullable;
23 import org.mybatis.dynamic.sql.SqlColumn;
24
25 public class ValueWhenPresentMapping<T> extends AbstractColumnMapping {
26
27 private final Supplier<@Nullable T> valueSupplier;
28
29 private final SqlColumn<T> localColumn;
30
31 private ValueWhenPresentMapping(SqlColumn<T> column, Supplier<@Nullable T> valueSupplier) {
32 super(column);
33 this.valueSupplier = Objects.requireNonNull(valueSupplier);
34 localColumn = Objects.requireNonNull(column);
35 }
36
37 public Optional<Object> value() {
38 return Optional.ofNullable(valueSupplier.get()).flatMap(this::convert);
39 }
40
41 private Optional<Object> convert(T value) {
42 return Optional.ofNullable(localColumn.convertParameterType(value));
43 }
44
45 @Override
46 public <R> R accept(ColumnMappingVisitor<R> visitor) {
47 return visitor.visit(this);
48 }
49
50 public static <T> ValueWhenPresentMapping<T> of(SqlColumn<T> column, Supplier<@Nullable T> valueSupplier) {
51 return new ValueWhenPresentMapping<>(column, valueSupplier);
52 }
53 }