1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.common;
17
18 import java.util.ArrayList;
19 import java.util.Collections;
20 import java.util.List;
21 import java.util.Optional;
22
23 import org.jspecify.annotations.Nullable;
24 import org.mybatis.dynamic.sql.AndOrCriteriaGroup;
25 import org.mybatis.dynamic.sql.SqlCriterion;
26
27 public abstract class AbstractBooleanExpressionModel {
28 private final @Nullable SqlCriterion initialCriterion;
29 private final List<AndOrCriteriaGroup> subCriteria ;
30
31 protected AbstractBooleanExpressionModel(AbstractBuilder<?> builder) {
32 initialCriterion = builder.initialCriterion;
33 subCriteria = builder.subCriteria;
34 }
35
36 public Optional<SqlCriterion> initialCriterion() {
37 return Optional.ofNullable(initialCriterion);
38 }
39
40 public List<AndOrCriteriaGroup> subCriteria() {
41 return Collections.unmodifiableList(subCriteria);
42 }
43
44 public abstract static class AbstractBuilder<T extends AbstractBuilder<T>> {
45 private @Nullable SqlCriterion initialCriterion;
46 private final List<AndOrCriteriaGroup> subCriteria = new ArrayList<>();
47
48 public T withInitialCriterion(@Nullable SqlCriterion initialCriterion) {
49 this.initialCriterion = initialCriterion;
50 return getThis();
51 }
52
53 public T withSubCriteria(List<AndOrCriteriaGroup> subCriteria) {
54 this.subCriteria.addAll(subCriteria);
55 return getThis();
56 }
57
58 protected abstract T getThis();
59 }
60 }