1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql;
17
18 import java.util.ArrayList;
19 import java.util.Collections;
20 import java.util.List;
21 import java.util.Objects;
22 import java.util.Optional;
23
24 import org.jspecify.annotations.Nullable;
25
26
27
28
29
30
31
32
33
34
35 public class AndOrCriteriaGroup {
36 private final String connector;
37 private final @Nullable SqlCriterion initialCriterion;
38 private final List<AndOrCriteriaGroup> subCriteria;
39
40 private AndOrCriteriaGroup(Builder builder) {
41 connector = Objects.requireNonNull(builder.connector);
42 initialCriterion = builder.initialCriterion;
43 subCriteria = builder.subCriteria;
44 }
45
46 public String connector() {
47 return connector;
48 }
49
50 public Optional<SqlCriterion> initialCriterion() {
51 return Optional.ofNullable(initialCriterion);
52 }
53
54 public List<AndOrCriteriaGroup> subCriteria() {
55 return Collections.unmodifiableList(subCriteria);
56 }
57
58 public static class Builder {
59 private @Nullable String connector;
60 private @Nullable SqlCriterion initialCriterion;
61 private final List<AndOrCriteriaGroup> subCriteria = new ArrayList<>();
62
63 public Builder withConnector(String connector) {
64 this.connector = connector;
65 return this;
66 }
67
68 public Builder withInitialCriterion(@Nullable SqlCriterion initialCriterion) {
69 this.initialCriterion = initialCriterion;
70 return this;
71 }
72
73 public Builder withSubCriteria(List<AndOrCriteriaGroup> subCriteria) {
74 this.subCriteria.addAll(subCriteria);
75 return this;
76 }
77
78 public AndOrCriteriaGroup build() {
79 return new AndOrCriteriaGroup(this);
80 }
81 }
82 }