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.Optional;
24 import java.util.function.Function;
25
26 import org.apache.maven.api.ProtoSession;
27 import org.apache.maven.api.annotations.Experimental;
28 import org.apache.maven.api.annotations.Immutable;
29 import org.apache.maven.api.annotations.Nonnull;
30 import org.apache.maven.api.annotations.NotThreadSafe;
31 import org.apache.maven.api.annotations.Nullable;
32
33 import static org.apache.maven.api.services.BaseRequest.nonNull;
34
35
36
37
38 @Experimental
39 @Immutable
40 public interface SettingsBuilderRequest {
41
42 @Nonnull
43 ProtoSession getSession();
44
45
46
47
48
49
50 @Nonnull
51 Optional<Source> getInstallationSettingsSource();
52
53
54
55
56
57
58 @Nonnull
59 Optional<Source> getProjectSettingsSource();
60
61
62
63
64
65
66 @Nonnull
67 Optional<Source> getUserSettingsSource();
68
69
70
71
72
73
74 @Nonnull
75 Optional<Function<String, String>> getInterpolationSource();
76
77 @Nonnull
78 static SettingsBuilderRequest build(
79 @Nonnull ProtoSession session,
80 @Nonnull Source installationSettingsSource,
81 @Nonnull Source userSettingsSource) {
82 return build(session, installationSettingsSource, null, userSettingsSource);
83 }
84
85 @Nonnull
86 static SettingsBuilderRequest build(
87 @Nonnull ProtoSession session, @Nonnull Path installationSettingsPath, @Nonnull Path userSettingsPath) {
88 return build(session, Source.fromPath(installationSettingsPath), null, Source.fromPath(userSettingsPath));
89 }
90
91 @Nonnull
92 static SettingsBuilderRequest build(
93 @Nonnull ProtoSession session,
94 @Nullable Source installationSettingsSource,
95 @Nullable Source projectSettingsSource,
96 @Nullable Source userSettingsSource) {
97 return builder()
98 .session(nonNull(session, "session cannot be null"))
99 .installationSettingsSource(installationSettingsSource)
100 .projectSettingsSource(projectSettingsSource)
101 .userSettingsSource(userSettingsSource)
102 .build();
103 }
104
105 @Nonnull
106 static SettingsBuilderRequest build(
107 @Nonnull ProtoSession session,
108 @Nullable Path installationSettingsPath,
109 @Nullable Path projectSettingsPath,
110 @Nullable Path userSettingsPath) {
111 return builder()
112 .session(nonNull(session, "session cannot be null"))
113 .installationSettingsSource(
114 installationSettingsPath != null && Files.exists(installationSettingsPath)
115 ? Source.fromPath(installationSettingsPath)
116 : null)
117 .projectSettingsSource(
118 projectSettingsPath != null && Files.exists(projectSettingsPath)
119 ? Source.fromPath(projectSettingsPath)
120 : null)
121 .userSettingsSource(
122 userSettingsPath != null && Files.exists(userSettingsPath)
123 ? Source.fromPath(userSettingsPath)
124 : null)
125 .build();
126 }
127
128 @Nonnull
129 static SettingsBuilderRequestBuilder builder() {
130 return new SettingsBuilderRequestBuilder();
131 }
132
133 @NotThreadSafe
134 class SettingsBuilderRequestBuilder {
135 ProtoSession session;
136 Source installationSettingsSource;
137 Source projectSettingsSource;
138 Source userSettingsSource;
139 Function<String, String> interpolationSource;
140
141 public SettingsBuilderRequestBuilder session(ProtoSession session) {
142 this.session = session;
143 return this;
144 }
145
146 public SettingsBuilderRequestBuilder installationSettingsSource(Source installationSettingsSource) {
147 this.installationSettingsSource = installationSettingsSource;
148 return this;
149 }
150
151 public SettingsBuilderRequestBuilder projectSettingsSource(Source projectSettingsSource) {
152 this.projectSettingsSource = projectSettingsSource;
153 return this;
154 }
155
156 public SettingsBuilderRequestBuilder userSettingsSource(Source userSettingsSource) {
157 this.userSettingsSource = userSettingsSource;
158 return this;
159 }
160
161 public SettingsBuilderRequestBuilder interpolationSource(Function<String, String> interpolationSource) {
162 this.interpolationSource = interpolationSource;
163 return this;
164 }
165
166 public SettingsBuilderRequest build() {
167 return new DefaultSettingsBuilderRequest(
168 session,
169 installationSettingsSource,
170 projectSettingsSource,
171 userSettingsSource,
172 interpolationSource);
173 }
174
175 private static class DefaultSettingsBuilderRequest extends BaseRequest<ProtoSession>
176 implements SettingsBuilderRequest {
177 private final Source installationSettingsSource;
178 private final Source projectSettingsSource;
179 private final Source userSettingsSource;
180 private final Function<String, String> interpolationSource;
181
182 @SuppressWarnings("checkstyle:ParameterNumber")
183 DefaultSettingsBuilderRequest(
184 @Nonnull ProtoSession session,
185 @Nullable Source installationSettingsSource,
186 @Nullable Source projectSettingsSource,
187 @Nullable Source userSettingsSource,
188 @Nullable Function<String, String> interpolationSource) {
189 super(session);
190 this.installationSettingsSource = installationSettingsSource;
191 this.projectSettingsSource = projectSettingsSource;
192 this.userSettingsSource = userSettingsSource;
193 this.interpolationSource = interpolationSource;
194 }
195
196 @Nonnull
197 @Override
198 public Optional<Source> getInstallationSettingsSource() {
199 return Optional.ofNullable(installationSettingsSource);
200 }
201
202 @Nonnull
203 @Override
204 public Optional<Source> getProjectSettingsSource() {
205 return Optional.ofNullable(projectSettingsSource);
206 }
207
208 @Nonnull
209 @Override
210 public Optional<Source> getUserSettingsSource() {
211 return Optional.ofNullable(userSettingsSource);
212 }
213
214 @Nonnull
215 @Override
216 public Optional<Function<String, String>> getInterpolationSource() {
217 return Optional.ofNullable(interpolationSource);
218 }
219 }
220 }
221 }