1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.api.cli;
20
21 import java.io.InputStream;
22 import java.io.OutputStream;
23 import java.nio.file.Path;
24 import java.util.Arrays;
25 import java.util.List;
26 import java.util.Map;
27 import java.util.Optional;
28
29 import org.apache.maven.api.annotations.Experimental;
30 import org.apache.maven.api.annotations.Immutable;
31 import org.apache.maven.api.annotations.Nonnull;
32 import org.apache.maven.api.annotations.Nullable;
33 import org.apache.maven.api.services.Lookup;
34 import org.apache.maven.api.services.LookupException;
35 import org.apache.maven.api.services.MessageBuilderFactory;
36
37 import static java.util.Objects.requireNonNull;
38
39
40
41
42
43
44
45
46 @Immutable
47 @Experimental
48 public interface ParserRequest {
49 String MVN_CMD = "mvn";
50 String MVN_NAME = "Maven";
51
52 String MVNENC_CMD = "mvnenc";
53 String MVNENC_NAME = "Maven Password Encrypting Tool";
54
55
56
57
58
59
60
61 @Nonnull
62 String command();
63
64
65
66
67
68
69 String commandName();
70
71
72
73
74
75
76 @Nonnull
77 Logger logger();
78
79
80
81
82
83
84 @Nonnull
85 MessageBuilderFactory messageBuilderFactory();
86
87
88
89
90
91
92 @Nonnull
93 List<String> args();
94
95
96
97
98
99
100 @Nonnull
101 Lookup lookup();
102
103
104
105
106
107
108
109 @Nullable
110 Path cwd();
111
112
113
114
115
116
117
118 @Nullable
119 Path mavenHome();
120
121
122
123
124
125
126
127 @Nullable
128 Path userHome();
129
130
131
132
133
134
135
136 @Nullable
137 InputStream in();
138
139
140
141
142
143
144
145 @Nullable
146 OutputStream out();
147
148
149
150
151
152
153
154 @Nullable
155 OutputStream err();
156
157
158
159
160
161
162
163
164
165 @Nonnull
166 static Builder mvn(
167 @Nonnull String[] args, @Nonnull Logger logger, @Nonnull MessageBuilderFactory messageBuilderFactory) {
168 return mvn(Arrays.asList(args), logger, messageBuilderFactory);
169 }
170
171
172
173
174
175
176
177
178
179 @Nonnull
180 static Builder mvn(
181 @Nonnull List<String> args, @Nonnull Logger logger, @Nonnull MessageBuilderFactory messageBuilderFactory) {
182 return builder(MVN_CMD, MVN_NAME, args, logger, messageBuilderFactory);
183 }
184
185
186
187
188
189
190
191
192
193 @Nonnull
194 static Builder mvnenc(
195 @Nonnull String[] args, @Nonnull Logger logger, @Nonnull MessageBuilderFactory messageBuilderFactory) {
196 return mvnenc(Arrays.asList(args), logger, messageBuilderFactory);
197 }
198
199
200
201
202
203
204
205
206
207 @Nonnull
208 static Builder mvnenc(
209 @Nonnull List<String> args, @Nonnull Logger logger, @Nonnull MessageBuilderFactory messageBuilderFactory) {
210 return builder(MVNENC_CMD, MVNENC_NAME, args, logger, messageBuilderFactory);
211 }
212
213
214
215
216
217
218
219
220
221
222
223 @Nonnull
224 static Builder builder(
225 @Nonnull String command,
226 @Nonnull String commandName,
227 @Nonnull List<String> args,
228 @Nonnull Logger logger,
229 @Nonnull MessageBuilderFactory messageBuilderFactory) {
230 return new Builder(command, commandName, args, logger, messageBuilderFactory);
231 }
232
233 class Builder {
234 private final String command;
235 private final String commandName;
236 private final List<String> args;
237 private final Logger logger;
238 private final MessageBuilderFactory messageBuilderFactory;
239 private Lookup lookup = EMPTY_LOOKUP;
240 private Path cwd;
241 private Path mavenHome;
242 private Path userHome;
243 private InputStream in;
244 private OutputStream out;
245 private OutputStream err;
246
247 private Builder(
248 String command,
249 String commandName,
250 List<String> args,
251 Logger logger,
252 MessageBuilderFactory messageBuilderFactory) {
253 this.command = requireNonNull(command, "command");
254 this.commandName = requireNonNull(commandName, "commandName");
255 this.args = requireNonNull(args, "args");
256 this.logger = requireNonNull(logger, "logger");
257 this.messageBuilderFactory = requireNonNull(messageBuilderFactory, "messageBuilderFactory");
258 }
259
260 public Builder lookup(@Nonnull Lookup lookup) {
261 this.lookup = requireNonNull(lookup);
262 return this;
263 }
264
265 public Builder cwd(Path cwd) {
266 this.cwd = cwd;
267 return this;
268 }
269
270 public Builder mavenHome(Path mavenHome) {
271 this.mavenHome = mavenHome;
272 return this;
273 }
274
275 public Builder userHome(Path userHome) {
276 this.userHome = userHome;
277 return this;
278 }
279
280 public Builder in(InputStream in) {
281 this.in = in;
282 return this;
283 }
284
285 public Builder out(OutputStream out) {
286 this.out = out;
287 return this;
288 }
289
290 public Builder err(OutputStream err) {
291 this.err = err;
292 return this;
293 }
294
295 public ParserRequest build() {
296 return new ParserRequestImpl(
297 command,
298 commandName,
299 args,
300 logger,
301 messageBuilderFactory,
302 lookup,
303 cwd,
304 mavenHome,
305 userHome,
306 in,
307 out,
308 err);
309 }
310
311 @SuppressWarnings("ParameterNumber")
312 private static class ParserRequestImpl implements ParserRequest {
313 private final String command;
314 private final String commandName;
315 private final Logger logger;
316 private final MessageBuilderFactory messageBuilderFactory;
317 private final List<String> args;
318 private final Lookup lookup;
319 private final Path cwd;
320 private final Path mavenHome;
321 private final Path userHome;
322 private final InputStream in;
323 private final OutputStream out;
324 private final OutputStream err;
325
326 private ParserRequestImpl(
327 String command,
328 String commandName,
329 List<String> args,
330 Logger logger,
331 MessageBuilderFactory messageBuilderFactory,
332 Lookup lookup,
333 Path cwd,
334 Path mavenHome,
335 Path userHome,
336 InputStream in,
337 OutputStream out,
338 OutputStream err) {
339 this.command = requireNonNull(command, "command");
340 this.commandName = requireNonNull(commandName, "commandName");
341 this.args = List.copyOf(requireNonNull(args, "args"));
342 this.logger = requireNonNull(logger, "logger");
343 this.messageBuilderFactory = requireNonNull(messageBuilderFactory, "messageBuilderFactory");
344 this.lookup = requireNonNull(lookup, "lookup");
345 this.cwd = cwd;
346 this.mavenHome = mavenHome;
347 this.userHome = userHome;
348 this.in = in;
349 this.out = out;
350 this.err = err;
351 }
352
353 @Override
354 public String command() {
355 return command;
356 }
357
358 @Override
359 public String commandName() {
360 return commandName;
361 }
362
363 @Override
364 public Logger logger() {
365 return logger;
366 }
367
368 @Override
369 public MessageBuilderFactory messageBuilderFactory() {
370 return messageBuilderFactory;
371 }
372
373 @Override
374 public List<String> args() {
375 return args;
376 }
377
378 @Override
379 public Lookup lookup() {
380 return lookup;
381 }
382
383 @Override
384 public Path cwd() {
385 return cwd;
386 }
387
388 @Override
389 public Path mavenHome() {
390 return mavenHome;
391 }
392
393 @Override
394 public Path userHome() {
395 return userHome;
396 }
397
398 @Override
399 public InputStream in() {
400 return in;
401 }
402
403 @Override
404 public OutputStream out() {
405 return out;
406 }
407
408 @Override
409 public OutputStream err() {
410 return err;
411 }
412 }
413
414 private static final Lookup EMPTY_LOOKUP = new Lookup() {
415 @Override
416 public <T> T lookup(Class<T> type) {
417 throw new LookupException("empty lookup");
418 }
419
420 @Override
421 public <T> T lookup(Class<T> type, String name) {
422 throw new LookupException("empty lookup");
423 }
424
425 @Override
426 public <T> Optional<T> lookupOptional(Class<T> type) {
427 return Optional.empty();
428 }
429
430 @Override
431 public <T> Optional<T> lookupOptional(Class<T> type, String name) {
432 return Optional.empty();
433 }
434
435 @Override
436 public <T> List<T> lookupList(Class<T> type) {
437 return List.of();
438 }
439
440 @Override
441 public <T> Map<String, T> lookupMap(Class<T> type) {
442 return Map.of();
443 }
444 };
445 }
446 }