1
2
3
4
5 package org.apache.maven.api.settings;
6
7 import java.io.Serializable;
8 import java.util.ArrayList;
9 import java.util.Collection;
10 import java.util.Collections;
11 import java.util.HashMap;
12 import java.util.List;
13 import java.util.Map;
14 import java.util.Objects;
15 import java.util.Optional;
16 import java.util.Set;
17 import java.util.stream.Collectors;
18 import java.util.stream.Stream;
19 import org.apache.maven.api.annotations.Experimental;
20 import org.apache.maven.api.annotations.Generated;
21 import org.apache.maven.api.annotations.Immutable;
22 import org.apache.maven.api.annotations.Nonnull;
23 import org.apache.maven.api.annotations.NotThreadSafe;
24 import org.apache.maven.api.annotations.ThreadSafe;
25
26
27
28
29 @Experimental
30 @Generated @ThreadSafe @Immutable
31 public class Settings
32 extends TrackableBase
33 implements Serializable, InputLocationTracker
34 {
35 final String namespaceUri;
36 final String modelEncoding;
37
38
39
40 final String localRepository;
41
42
43
44 final boolean interactiveMode;
45
46
47
48 final boolean usePluginRegistry;
49
50
51
52 final boolean offline;
53
54
55
56
57
58
59
60 final List<Proxy> proxies;
61
62
63
64
65
66 final List<Server> servers;
67
68
69
70 final List<Mirror> mirrors;
71
72
73
74 final List<Repository> repositories;
75
76
77
78 final List<Repository> pluginRepositories;
79
80
81
82
83 final List<Profile> profiles;
84
85
86
87
88 final List<String> activeProfiles;
89
90
91
92
93 final List<String> pluginGroups;
94
95
96
97
98
99 protected Settings(Builder builder) {
100 super(builder);
101 this.namespaceUri = builder.namespaceUri != null ? builder.namespaceUri : (builder.base != null ? builder.base.namespaceUri : null);
102 this.modelEncoding = builder.modelEncoding != null ? builder.modelEncoding : (builder.base != null ? builder.base.modelEncoding : "UTF-8");
103 this.localRepository = builder.localRepository != null ? builder.localRepository : (builder.base != null ? builder.base.localRepository : null);
104 this.interactiveMode = builder.interactiveMode != null ? builder.interactiveMode : (builder.base != null ? builder.base.interactiveMode : true);
105 this.usePluginRegistry = builder.usePluginRegistry != null ? builder.usePluginRegistry : (builder.base != null ? builder.base.usePluginRegistry : false);
106 this.offline = builder.offline != null ? builder.offline : (builder.base != null ? builder.base.offline : false);
107 this.proxies = ImmutableCollections.copy(builder.proxies != null ? builder.proxies : (builder.base != null ? builder.base.proxies : null));
108 this.servers = ImmutableCollections.copy(builder.servers != null ? builder.servers : (builder.base != null ? builder.base.servers : null));
109 this.mirrors = ImmutableCollections.copy(builder.mirrors != null ? builder.mirrors : (builder.base != null ? builder.base.mirrors : null));
110 this.repositories = ImmutableCollections.copy(builder.repositories != null ? builder.repositories : (builder.base != null ? builder.base.repositories : null));
111 this.pluginRepositories = ImmutableCollections.copy(builder.pluginRepositories != null ? builder.pluginRepositories : (builder.base != null ? builder.base.pluginRepositories : null));
112 this.profiles = ImmutableCollections.copy(builder.profiles != null ? builder.profiles : (builder.base != null ? builder.base.profiles : null));
113 this.activeProfiles = ImmutableCollections.copy(builder.activeProfiles != null ? builder.activeProfiles : (builder.base != null ? builder.base.activeProfiles : null));
114 this.pluginGroups = ImmutableCollections.copy(builder.pluginGroups != null ? builder.pluginGroups : (builder.base != null ? builder.base.pluginGroups : null));
115 }
116
117 public String getNamespaceUri() {
118 return namespaceUri;
119 }
120
121 public String getModelEncoding() {
122 return modelEncoding;
123 }
124
125
126
127
128
129
130 public String getLocalRepository() {
131 return this.localRepository;
132 }
133
134
135
136
137
138
139 public boolean isInteractiveMode() {
140 return this.interactiveMode;
141 }
142
143
144
145
146
147
148 public boolean isUsePluginRegistry() {
149 return this.usePluginRegistry;
150 }
151
152
153
154
155
156
157 public boolean isOffline() {
158 return this.offline;
159 }
160
161
162
163
164
165
166
167
168
169
170 @Nonnull
171 public List<Proxy> getProxies() {
172 return this.proxies;
173 }
174
175
176
177
178
179
180
181
182 @Nonnull
183 public List<Server> getServers() {
184 return this.servers;
185 }
186
187
188
189
190
191
192 @Nonnull
193 public List<Mirror> getMirrors() {
194 return this.mirrors;
195 }
196
197
198
199
200
201
202 @Nonnull
203 public List<Repository> getRepositories() {
204 return this.repositories;
205 }
206
207
208
209
210
211
212 @Nonnull
213 public List<Repository> getPluginRepositories() {
214 return this.pluginRepositories;
215 }
216
217
218
219
220
221
222
223 @Nonnull
224 public List<Profile> getProfiles() {
225 return this.profiles;
226 }
227
228
229
230
231
232
233
234 @Nonnull
235 public List<String> getActiveProfiles() {
236 return this.activeProfiles;
237 }
238
239
240
241
242
243
244
245 @Nonnull
246 public List<String> getPluginGroups() {
247 return this.pluginGroups;
248 }
249
250
251
252
253
254
255 @Nonnull
256 public Builder with() {
257 return newBuilder(this);
258 }
259
260
261
262
263
264
265 @Nonnull
266 public Settings withLocalRepository(String localRepository) {
267 return newBuilder(this, true).localRepository(localRepository).build();
268 }
269
270
271
272
273
274
275 @Nonnull
276 public Settings withInteractiveMode(boolean interactiveMode) {
277 return newBuilder(this, true).interactiveMode(interactiveMode).build();
278 }
279
280
281
282
283
284
285 @Nonnull
286 public Settings withUsePluginRegistry(boolean usePluginRegistry) {
287 return newBuilder(this, true).usePluginRegistry(usePluginRegistry).build();
288 }
289
290
291
292
293
294
295 @Nonnull
296 public Settings withOffline(boolean offline) {
297 return newBuilder(this, true).offline(offline).build();
298 }
299
300
301
302
303
304
305 @Nonnull
306 public Settings withProxies(Collection<Proxy> proxies) {
307 return newBuilder(this, true).proxies(proxies).build();
308 }
309
310
311
312
313
314
315 @Nonnull
316 public Settings withServers(Collection<Server> servers) {
317 return newBuilder(this, true).servers(servers).build();
318 }
319
320
321
322
323
324
325 @Nonnull
326 public Settings withMirrors(Collection<Mirror> mirrors) {
327 return newBuilder(this, true).mirrors(mirrors).build();
328 }
329
330
331
332
333
334
335 @Nonnull
336 public Settings withRepositories(Collection<Repository> repositories) {
337 return newBuilder(this, true).repositories(repositories).build();
338 }
339
340
341
342
343
344
345 @Nonnull
346 public Settings withPluginRepositories(Collection<Repository> pluginRepositories) {
347 return newBuilder(this, true).pluginRepositories(pluginRepositories).build();
348 }
349
350
351
352
353
354
355 @Nonnull
356 public Settings withProfiles(Collection<Profile> profiles) {
357 return newBuilder(this, true).profiles(profiles).build();
358 }
359
360
361
362
363
364
365 @Nonnull
366 public Settings withActiveProfiles(Collection<String> activeProfiles) {
367 return newBuilder(this, true).activeProfiles(activeProfiles).build();
368 }
369
370
371
372
373
374
375 @Nonnull
376 public Settings withPluginGroups(Collection<String> pluginGroups) {
377 return newBuilder(this, true).pluginGroups(pluginGroups).build();
378 }
379
380
381
382
383
384
385
386
387 @Nonnull
388 public static Settings newInstance() {
389 return newInstance(true);
390 }
391
392
393
394
395
396
397
398
399 @Nonnull
400 public static Settings newInstance(boolean withDefaults) {
401 return newBuilder(withDefaults).build();
402 }
403
404
405
406
407
408
409
410
411 @Nonnull
412 public static Builder newBuilder() {
413 return newBuilder(true);
414 }
415
416
417
418
419
420
421
422 @Nonnull
423 public static Builder newBuilder(boolean withDefaults) {
424 return new Builder(withDefaults);
425 }
426
427
428
429
430
431
432
433
434 @Nonnull
435 public static Builder newBuilder(Settings from) {
436 return newBuilder(from, false);
437 }
438
439
440
441
442
443
444
445
446 @Nonnull
447 public static Builder newBuilder(Settings from, boolean forceCopy) {
448 return new Builder(from, forceCopy);
449 }
450
451
452
453
454
455
456 @NotThreadSafe
457 public static class Builder
458 extends TrackableBase.Builder
459 {
460 Settings base;
461 String namespaceUri;
462 String modelEncoding;
463 String localRepository;
464 Boolean interactiveMode;
465 Boolean usePluginRegistry;
466 Boolean offline;
467 Collection<Proxy> proxies;
468 Collection<Server> servers;
469 Collection<Mirror> mirrors;
470 Collection<Repository> repositories;
471 Collection<Repository> pluginRepositories;
472 Collection<Profile> profiles;
473 Collection<String> activeProfiles;
474 Collection<String> pluginGroups;
475
476 protected Builder(boolean withDefaults) {
477 super(withDefaults);
478 if (withDefaults) {
479 this.interactiveMode = true;
480 this.usePluginRegistry = false;
481 this.offline = false;
482 }
483 }
484
485 protected Builder(Settings base, boolean forceCopy) {
486 super(base, forceCopy);
487 this.namespaceUri = base.namespaceUri;
488 this.modelEncoding = base.modelEncoding;
489 if (forceCopy) {
490 this.localRepository = base.localRepository;
491 this.interactiveMode = base.interactiveMode;
492 this.usePluginRegistry = base.usePluginRegistry;
493 this.offline = base.offline;
494 this.proxies = base.proxies;
495 this.servers = base.servers;
496 this.mirrors = base.mirrors;
497 this.repositories = base.repositories;
498 this.pluginRepositories = base.pluginRepositories;
499 this.profiles = base.profiles;
500 this.activeProfiles = base.activeProfiles;
501 this.pluginGroups = base.pluginGroups;
502 this.locations = base.locations;
503 this.importedFrom = base.importedFrom;
504 } else {
505 this.base = base;
506 }
507 }
508
509 @Nonnull
510 public Builder namespaceUri(String namespaceUri) {
511 this.namespaceUri = namespaceUri;
512 return this;
513 }
514
515 @Nonnull
516 public Builder modelEncoding(String modelEncoding) {
517 this.modelEncoding = modelEncoding;
518 return this;
519 }
520
521 @Nonnull
522 public Builder localRepository(String localRepository) {
523 this.localRepository = localRepository;
524 return this;
525 }
526
527 @Nonnull
528 public Builder interactiveMode(boolean interactiveMode) {
529 this.interactiveMode = interactiveMode;
530 return this;
531 }
532
533 @Nonnull
534 public Builder usePluginRegistry(boolean usePluginRegistry) {
535 this.usePluginRegistry = usePluginRegistry;
536 return this;
537 }
538
539 @Nonnull
540 public Builder offline(boolean offline) {
541 this.offline = offline;
542 return this;
543 }
544
545 @Nonnull
546 public Builder proxies(Collection<Proxy> proxies) {
547 this.proxies = proxies;
548 return this;
549 }
550
551 @Nonnull
552 public Builder servers(Collection<Server> servers) {
553 this.servers = servers;
554 return this;
555 }
556
557 @Nonnull
558 public Builder mirrors(Collection<Mirror> mirrors) {
559 this.mirrors = mirrors;
560 return this;
561 }
562
563 @Nonnull
564 public Builder repositories(Collection<Repository> repositories) {
565 this.repositories = repositories;
566 return this;
567 }
568
569 @Nonnull
570 public Builder pluginRepositories(Collection<Repository> pluginRepositories) {
571 this.pluginRepositories = pluginRepositories;
572 return this;
573 }
574
575 @Nonnull
576 public Builder profiles(Collection<Profile> profiles) {
577 this.profiles = profiles;
578 return this;
579 }
580
581 @Nonnull
582 public Builder activeProfiles(Collection<String> activeProfiles) {
583 this.activeProfiles = activeProfiles;
584 return this;
585 }
586
587 @Nonnull
588 public Builder pluginGroups(Collection<String> pluginGroups) {
589 this.pluginGroups = pluginGroups;
590 return this;
591 }
592
593
594 @Nonnull
595 public Builder location(Object key, InputLocation location) {
596 if (location != null) {
597 if (!(this.locations instanceof HashMap)) {
598 this.locations = this.locations != null ? new HashMap<>(this.locations) : new HashMap<>();
599 }
600 this.locations.put(key, location);
601 }
602 return this;
603 }
604
605 @Nonnull
606 public Builder importedFrom(InputLocation importedFrom) {
607 this.importedFrom = importedFrom;
608 return this;
609 }
610
611 @Nonnull
612 public Settings build() {
613
614 if (base != null
615 && (localRepository == null || localRepository == base.localRepository)
616 && (interactiveMode == null || interactiveMode == base.interactiveMode)
617 && (usePluginRegistry == null || usePluginRegistry == base.usePluginRegistry)
618 && (offline == null || offline == base.offline)
619 && (proxies == null || proxies == base.proxies)
620 && (servers == null || servers == base.servers)
621 && (mirrors == null || mirrors == base.mirrors)
622 && (repositories == null || repositories == base.repositories)
623 && (pluginRepositories == null || pluginRepositories == base.pluginRepositories)
624 && (profiles == null || profiles == base.profiles)
625 && (activeProfiles == null || activeProfiles == base.activeProfiles)
626 && (pluginGroups == null || pluginGroups == base.pluginGroups)
627 ) {
628 return base;
629 }
630 return new Settings(this);
631 }
632
633 }
634
635 }