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