1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.api.services;
20
21 import java.nio.file.Files;
22 import java.nio.file.Path;
23 import java.util.Objects;
24 import java.util.Optional;
25 import java.util.function.UnaryOperator;
26
27 import org.apache.maven.api.ProtoSession;
28 import org.apache.maven.api.annotations.Experimental;
29 import org.apache.maven.api.annotations.Immutable;
30 import org.apache.maven.api.annotations.Nonnull;
31 import org.apache.maven.api.annotations.NotThreadSafe;
32 import org.apache.maven.api.annotations.Nullable;
33
34 import static java.util.Objects.requireNonNull;
35
36
37
38
39 @Experimental
40 @Immutable
41 public interface SettingsBuilderRequest extends Request<ProtoSession> {
42
43
44
45
46
47
48 @Nonnull
49 Optional<Source> getInstallationSettingsSource();
50
51
52
53
54
55
56 @Nonnull
57 Optional<Source> getProjectSettingsSource();
58
59
60
61
62
63
64 @Nonnull
65 Optional<Source> getUserSettingsSource();
66
67
68
69
70
71
72 @Nonnull
73 Optional<UnaryOperator<String>> getInterpolationSource();
74
75 @Nonnull
76 static SettingsBuilderRequest build(
77 @Nonnull ProtoSession session,
78 @Nonnull Source installationSettingsSource,
79 @Nonnull Source userSettingsSource) {
80 return build(session, installationSettingsSource, null, userSettingsSource);
81 }
82
83 @Nonnull
84 static SettingsBuilderRequest build(
85 @Nonnull ProtoSession session, @Nonnull Path installationSettingsPath, @Nonnull Path userSettingsPath) {
86 return build(session, Sources.fromPath(installationSettingsPath), null, Sources.fromPath(userSettingsPath));
87 }
88
89 @Nonnull
90 static SettingsBuilderRequest build(
91 @Nonnull ProtoSession session,
92 @Nullable Source installationSettingsSource,
93 @Nullable Source projectSettingsSource,
94 @Nullable Source userSettingsSource) {
95 return builder()
96 .session(requireNonNull(session, "session cannot be null"))
97 .installationSettingsSource(installationSettingsSource)
98 .projectSettingsSource(projectSettingsSource)
99 .userSettingsSource(userSettingsSource)
100 .build();
101 }
102
103 @Nonnull
104 static SettingsBuilderRequest build(
105 @Nonnull ProtoSession session,
106 @Nullable Path installationSettingsPath,
107 @Nullable Path projectSettingsPath,
108 @Nullable Path userSettingsPath) {
109 return builder()
110 .session(requireNonNull(session, "session cannot be null"))
111 .installationSettingsSource(
112 installationSettingsPath != null && Files.exists(installationSettingsPath)
113 ? Sources.fromPath(installationSettingsPath)
114 : null)
115 .projectSettingsSource(
116 projectSettingsPath != null && Files.exists(projectSettingsPath)
117 ? Sources.fromPath(projectSettingsPath)
118 : null)
119 .userSettingsSource(
120 userSettingsPath != null && Files.exists(userSettingsPath)
121 ? Sources.fromPath(userSettingsPath)
122 : null)
123 .build();
124 }
125
126 @Nonnull
127 static SettingsBuilderRequestBuilder builder() {
128 return new SettingsBuilderRequestBuilder();
129 }
130
131 @NotThreadSafe
132 class SettingsBuilderRequestBuilder {
133 ProtoSession session;
134 RequestTrace trace;
135 Source installationSettingsSource;
136 Source projectSettingsSource;
137 Source userSettingsSource;
138 UnaryOperator<String> interpolationSource;
139
140 public SettingsBuilderRequestBuilder session(ProtoSession session) {
141 this.session = session;
142 return this;
143 }
144
145 public SettingsBuilderRequestBuilder trace(RequestTrace trace) {
146 this.trace = trace;
147 return this;
148 }
149
150 public SettingsBuilderRequestBuilder installationSettingsSource(Source installationSettingsSource) {
151 this.installationSettingsSource = installationSettingsSource;
152 return this;
153 }
154
155 public SettingsBuilderRequestBuilder projectSettingsSource(Source projectSettingsSource) {
156 this.projectSettingsSource = projectSettingsSource;
157 return this;
158 }
159
160 public SettingsBuilderRequestBuilder userSettingsSource(Source userSettingsSource) {
161 this.userSettingsSource = userSettingsSource;
162 return this;
163 }
164
165 public SettingsBuilderRequestBuilder interpolationSource(UnaryOperator<String> interpolationSource) {
166 this.interpolationSource = interpolationSource;
167 return this;
168 }
169
170 public SettingsBuilderRequest build() {
171 return new DefaultSettingsBuilderRequest(
172 session,
173 trace,
174 installationSettingsSource,
175 projectSettingsSource,
176 userSettingsSource,
177 interpolationSource);
178 }
179
180 private static class DefaultSettingsBuilderRequest extends BaseRequest<ProtoSession>
181 implements SettingsBuilderRequest {
182 private final Source installationSettingsSource;
183 private final Source projectSettingsSource;
184 private final Source userSettingsSource;
185 private final UnaryOperator<String> interpolationSource;
186
187 @SuppressWarnings("checkstyle:ParameterNumber")
188 DefaultSettingsBuilderRequest(
189 @Nonnull ProtoSession session,
190 @Nullable RequestTrace trace,
191 @Nullable Source installationSettingsSource,
192 @Nullable Source projectSettingsSource,
193 @Nullable Source userSettingsSource,
194 @Nullable UnaryOperator<String> interpolationSource) {
195 super(session, trace);
196 this.installationSettingsSource = installationSettingsSource;
197 this.projectSettingsSource = projectSettingsSource;
198 this.userSettingsSource = userSettingsSource;
199 this.interpolationSource = interpolationSource;
200 }
201
202 @Nonnull
203 @Override
204 public Optional<Source> getInstallationSettingsSource() {
205 return Optional.ofNullable(installationSettingsSource);
206 }
207
208 @Nonnull
209 @Override
210 public Optional<Source> getProjectSettingsSource() {
211 return Optional.ofNullable(projectSettingsSource);
212 }
213
214 @Nonnull
215 @Override
216 public Optional<Source> getUserSettingsSource() {
217 return Optional.ofNullable(userSettingsSource);
218 }
219
220 @Nonnull
221 @Override
222 public Optional<UnaryOperator<String>> getInterpolationSource() {
223 return Optional.ofNullable(interpolationSource);
224 }
225
226 @Override
227 public boolean equals(Object o) {
228 return o instanceof DefaultSettingsBuilderRequest that
229 && Objects.equals(installationSettingsSource, that.installationSettingsSource)
230 && Objects.equals(projectSettingsSource, that.projectSettingsSource)
231 && Objects.equals(userSettingsSource, that.userSettingsSource)
232 && Objects.equals(interpolationSource, that.interpolationSource);
233 }
234
235 @Override
236 public int hashCode() {
237 return Objects.hash(
238 installationSettingsSource, projectSettingsSource, userSettingsSource, interpolationSource);
239 }
240
241 @Override
242 public String toString() {
243 return "SettingsBuilderRequest[" + "installationSettingsSource="
244 + installationSettingsSource + ", projectSettingsSource="
245 + projectSettingsSource + ", userSettingsSource="
246 + userSettingsSource + ", interpolationSource="
247 + interpolationSource + ']';
248 }
249 }
250 }
251 }