1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.where.render;
17
18 import static org.mybatis.dynamic.sql.util.StringUtilities.spaceBefore;
19
20 import java.util.Objects;
21
22 import org.jspecify.annotations.Nullable;
23 import org.mybatis.dynamic.sql.util.FragmentAndParameters;
24
25 public class RenderedCriterion {
26 private final @Nullable String connector;
27 private final FragmentAndParameters fragmentAndParameters;
28
29 private RenderedCriterion(Builder builder) {
30 connector = builder.connector;
31 fragmentAndParameters = Objects.requireNonNull(builder.fragmentAndParameters);
32 }
33
34 public FragmentAndParameters fragmentAndParameters() {
35 return fragmentAndParameters;
36 }
37
38 public FragmentAndParameters fragmentAndParametersWithConnector() {
39 if (connector == null) {
40 return fragmentAndParameters;
41 } else {
42 return prependFragment(fragmentAndParameters, connector);
43 }
44 }
45
46 public RenderedCriterion withConnector(String connector) {
47 return new RenderedCriterion.Builder()
48 .withFragmentAndParameters(fragmentAndParameters)
49 .withConnector(connector)
50 .build();
51 }
52
53 private FragmentAndParameters prependFragment(FragmentAndParameters fragmentAndParameters, String connector) {
54 return fragmentAndParameters.mapFragment(s -> connector + spaceBefore(s));
55 }
56
57 public static class Builder {
58 private @Nullable String connector;
59 private @Nullable FragmentAndParameters fragmentAndParameters;
60
61 public Builder withConnector(String connector) {
62 this.connector = connector;
63 return this;
64 }
65
66 public Builder withFragmentAndParameters(FragmentAndParameters fragmentAndParameters) {
67 this.fragmentAndParameters = fragmentAndParameters;
68 return this;
69 }
70
71 public RenderedCriterion build() {
72 return new RenderedCriterion(this);
73 }
74 }
75 }