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.Session;
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 Session 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 Session session, @Nonnull Source installationSettingsSource, @Nonnull Source userSettingsSource) {
80 return build(session, installationSettingsSource, null, userSettingsSource);
81 }
82
83 @Nonnull
84 static SettingsBuilderRequest build(
85 @Nonnull Session session, @Nonnull Path installationSettingsPath, @Nonnull Path userSettingsPath) {
86 return build(session, Source.fromPath(installationSettingsPath), null, Source.fromPath(userSettingsPath));
87 }
88
89 @Nonnull
90 static SettingsBuilderRequest build(
91 @Nonnull Session session,
92 @Nullable Source installationSettingsSource,
93 @Nullable Source projectSettingsSource,
94 @Nullable Source userSettingsSource) {
95 return builder()
96 .session(nonNull(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 Session session,
106 @Nullable Path installationSettingsPath,
107 @Nullable Path projectSettingsPath,
108 @Nullable Path userSettingsPath) {
109 return builder()
110 .session(nonNull(session, "session cannot be null"))
111 .installationSettingsSource(
112 installationSettingsPath != null && Files.exists(installationSettingsPath)
113 ? Source.fromPath(installationSettingsPath)
114 : null)
115 .projectSettingsSource(
116 projectSettingsPath != null && Files.exists(projectSettingsPath)
117 ? Source.fromPath(projectSettingsPath)
118 : null)
119 .userSettingsSource(
120 userSettingsPath != null && Files.exists(userSettingsPath)
121 ? Source.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 Session session;
134 Source installationSettingsSource;
135 Source projectSettingsSource;
136 Source userSettingsSource;
137 Function<String, String> interpolationSource;
138
139 public SettingsBuilderRequestBuilder session(Session session) {
140 this.session = session;
141 return this;
142 }
143
144 public SettingsBuilderRequestBuilder installationSettingsSource(Source installationSettingsSource) {
145 this.installationSettingsSource = installationSettingsSource;
146 return this;
147 }
148
149 public SettingsBuilderRequestBuilder projectSettingsSource(Source projectSettingsSource) {
150 this.projectSettingsSource = projectSettingsSource;
151 return this;
152 }
153
154 public SettingsBuilderRequestBuilder userSettingsSource(Source userSettingsSource) {
155 this.userSettingsSource = userSettingsSource;
156 return this;
157 }
158
159 public SettingsBuilderRequestBuilder interpolationSource(Function<String, String> interpolationSource) {
160 this.interpolationSource = interpolationSource;
161 return this;
162 }
163
164 public SettingsBuilderRequest build() {
165 return new DefaultSettingsBuilderRequest(
166 session,
167 installationSettingsSource,
168 projectSettingsSource,
169 userSettingsSource,
170 interpolationSource);
171 }
172
173 private static class DefaultSettingsBuilderRequest extends BaseRequest implements SettingsBuilderRequest {
174 private final Source installationSettingsSource;
175 private final Source projectSettingsSource;
176 private final Source userSettingsSource;
177 private final Function<String, String> interpolationSource;
178
179 @SuppressWarnings("checkstyle:ParameterNumber")
180 DefaultSettingsBuilderRequest(
181 @Nonnull Session session,
182 @Nullable Source installationSettingsSource,
183 @Nullable Source projectSettingsSource,
184 @Nullable Source userSettingsSource,
185 @Nullable Function<String, String> interpolationSource) {
186 super(session);
187 this.installationSettingsSource = installationSettingsSource;
188 this.projectSettingsSource = projectSettingsSource;
189 this.userSettingsSource = userSettingsSource;
190 this.interpolationSource = interpolationSource;
191 }
192
193 @Nonnull
194 @Override
195 public Optional<Source> getInstallationSettingsSource() {
196 return Optional.ofNullable(installationSettingsSource);
197 }
198
199 @Nonnull
200 @Override
201 public Optional<Source> getProjectSettingsSource() {
202 return Optional.ofNullable(projectSettingsSource);
203 }
204
205 @Nonnull
206 @Override
207 public Optional<Source> getUserSettingsSource() {
208 return Optional.ofNullable(userSettingsSource);
209 }
210
211 @Nonnull
212 @Override
213 public Optional<Function<String, String>> getInterpolationSource() {
214 return Optional.ofNullable(interpolationSource);
215 }
216 }
217 }
218 }