1
2
3
4
5 package org.apache.maven.api.plugin.descriptor;
6
7 import java.io.Serializable;
8 import java.util.Collections;
9 import java.util.HashMap;
10 import java.util.Map;
11 import java.util.Objects;
12 import java.util.Optional;
13 import java.util.Set;
14 import java.util.stream.Collectors;
15 import java.util.stream.Stream;
16 import org.apache.maven.api.annotations.Experimental;
17 import org.apache.maven.api.annotations.Generated;
18 import org.apache.maven.api.annotations.Immutable;
19 import org.apache.maven.api.annotations.Nonnull;
20 import org.apache.maven.api.annotations.NotThreadSafe;
21 import org.apache.maven.api.annotations.ThreadSafe;
22
23
24
25
26 @Experimental
27 @Generated @ThreadSafe @Immutable
28 public class Parameter
29 implements Serializable
30 {
31
32
33
34
35 final String name;
36
37
38
39
40
41 final String alias;
42
43
44
45
46 final String type;
47
48
49
50
51 final boolean required;
52
53
54
55
56
57
58
59
60
61 final boolean editable;
62
63
64
65 final String description;
66
67
68
69 final String since;
70
71
72
73
74 final String deprecated;
75
76
77
78 final String expression;
79
80
81
82 final String defaultValue;
83
84
85
86
87
88 protected Parameter(Builder builder) {
89 this.name = builder.name != null ? builder.name : (builder.base != null ? builder.base.name : null);
90 this.alias = builder.alias != null ? builder.alias : (builder.base != null ? builder.base.alias : null);
91 this.type = builder.type != null ? builder.type : (builder.base != null ? builder.base.type : null);
92 this.required = builder.required != null ? builder.required : (builder.base != null ? builder.base.required : false);
93 this.editable = builder.editable != null ? builder.editable : (builder.base != null ? builder.base.editable : true);
94 this.description = builder.description != null ? builder.description : (builder.base != null ? builder.base.description : null);
95 this.since = builder.since != null ? builder.since : (builder.base != null ? builder.base.since : null);
96 this.deprecated = builder.deprecated != null ? builder.deprecated : (builder.base != null ? builder.base.deprecated : null);
97 this.expression = builder.expression != null ? builder.expression : (builder.base != null ? builder.base.expression : null);
98 this.defaultValue = builder.defaultValue != null ? builder.defaultValue : (builder.base != null ? builder.base.defaultValue : null);
99 }
100
101
102
103
104
105
106
107 public String getName() {
108 return this.name;
109 }
110
111
112
113
114
115
116
117
118 public String getAlias() {
119 return this.alias;
120 }
121
122
123
124
125
126
127
128 public String getType() {
129 return this.type;
130 }
131
132
133
134
135
136
137
138 public boolean isRequired() {
139 return this.required;
140 }
141
142
143
144
145
146
147
148
149
150
151
152
153 public boolean isEditable() {
154 return this.editable;
155 }
156
157
158
159
160
161
162 public String getDescription() {
163 return this.description;
164 }
165
166
167
168
169
170
171 public String getSince() {
172 return this.since;
173 }
174
175
176
177
178
179
180
181 public String getDeprecated() {
182 return this.deprecated;
183 }
184
185
186
187
188
189
190 public String getExpression() {
191 return this.expression;
192 }
193
194
195
196
197
198
199 public String getDefaultValue() {
200 return this.defaultValue;
201 }
202
203
204
205
206
207
208 @Nonnull
209 public Builder with() {
210 return newBuilder(this);
211 }
212
213
214
215
216
217
218 @Nonnull
219 public Parameter withName(String name) {
220 return newBuilder(this, true).name(name).build();
221 }
222
223
224
225
226
227
228 @Nonnull
229 public Parameter withAlias(String alias) {
230 return newBuilder(this, true).alias(alias).build();
231 }
232
233
234
235
236
237
238 @Nonnull
239 public Parameter withType(String type) {
240 return newBuilder(this, true).type(type).build();
241 }
242
243
244
245
246
247
248 @Nonnull
249 public Parameter withRequired(boolean required) {
250 return newBuilder(this, true).required(required).build();
251 }
252
253
254
255
256
257
258 @Nonnull
259 public Parameter withEditable(boolean editable) {
260 return newBuilder(this, true).editable(editable).build();
261 }
262
263
264
265
266
267
268 @Nonnull
269 public Parameter withDescription(String description) {
270 return newBuilder(this, true).description(description).build();
271 }
272
273
274
275
276
277
278 @Nonnull
279 public Parameter withSince(String since) {
280 return newBuilder(this, true).since(since).build();
281 }
282
283
284
285
286
287
288 @Nonnull
289 public Parameter withDeprecated(String deprecated) {
290 return newBuilder(this, true).deprecated(deprecated).build();
291 }
292
293
294
295
296
297
298 @Nonnull
299 public Parameter withExpression(String expression) {
300 return newBuilder(this, true).expression(expression).build();
301 }
302
303
304
305
306
307
308 @Nonnull
309 public Parameter withDefaultValue(String defaultValue) {
310 return newBuilder(this, true).defaultValue(defaultValue).build();
311 }
312
313
314
315
316
317
318
319
320 @Nonnull
321 public static Parameter newInstance() {
322 return newInstance(true);
323 }
324
325
326
327
328
329
330
331
332 @Nonnull
333 public static Parameter newInstance(boolean withDefaults) {
334 return newBuilder(withDefaults).build();
335 }
336
337
338
339
340
341
342
343
344 @Nonnull
345 public static Builder newBuilder() {
346 return newBuilder(true);
347 }
348
349
350
351
352
353
354
355 @Nonnull
356 public static Builder newBuilder(boolean withDefaults) {
357 return new Builder(withDefaults);
358 }
359
360
361
362
363
364
365
366
367 @Nonnull
368 public static Builder newBuilder(Parameter from) {
369 return newBuilder(from, false);
370 }
371
372
373
374
375
376
377
378
379 @Nonnull
380 public static Builder newBuilder(Parameter from, boolean forceCopy) {
381 return new Builder(from, forceCopy);
382 }
383
384
385
386
387
388
389 @NotThreadSafe
390 public static class Builder
391 {
392 Parameter base;
393 String name;
394 String alias;
395 String type;
396 Boolean required;
397 Boolean editable;
398 String description;
399 String since;
400 String deprecated;
401 String expression;
402 String defaultValue;
403
404 protected Builder(boolean withDefaults) {
405 if (withDefaults) {
406 this.required = false;
407 this.editable = true;
408 }
409 }
410
411 protected Builder(Parameter base, boolean forceCopy) {
412 if (forceCopy) {
413 this.name = base.name;
414 this.alias = base.alias;
415 this.type = base.type;
416 this.required = base.required;
417 this.editable = base.editable;
418 this.description = base.description;
419 this.since = base.since;
420 this.deprecated = base.deprecated;
421 this.expression = base.expression;
422 this.defaultValue = base.defaultValue;
423 } else {
424 this.base = base;
425 }
426 }
427
428 @Nonnull
429 public Builder name(String name) {
430 this.name = name;
431 return this;
432 }
433
434 @Nonnull
435 public Builder alias(String alias) {
436 this.alias = alias;
437 return this;
438 }
439
440 @Nonnull
441 public Builder type(String type) {
442 this.type = type;
443 return this;
444 }
445
446 @Nonnull
447 public Builder required(boolean required) {
448 this.required = required;
449 return this;
450 }
451
452 @Nonnull
453 public Builder editable(boolean editable) {
454 this.editable = editable;
455 return this;
456 }
457
458 @Nonnull
459 public Builder description(String description) {
460 this.description = description;
461 return this;
462 }
463
464 @Nonnull
465 public Builder since(String since) {
466 this.since = since;
467 return this;
468 }
469
470 @Nonnull
471 public Builder deprecated(String deprecated) {
472 this.deprecated = deprecated;
473 return this;
474 }
475
476 @Nonnull
477 public Builder expression(String expression) {
478 this.expression = expression;
479 return this;
480 }
481
482 @Nonnull
483 public Builder defaultValue(String defaultValue) {
484 this.defaultValue = defaultValue;
485 return this;
486 }
487
488
489 @Nonnull
490 public Parameter build() {
491
492 if (base != null
493 && (name == null || name == base.name)
494 && (alias == null || alias == base.alias)
495 && (type == null || type == base.type)
496 && (required == null || required == base.required)
497 && (editable == null || editable == base.editable)
498 && (description == null || description == base.description)
499 && (since == null || since == base.since)
500 && (deprecated == null || deprecated == base.deprecated)
501 && (expression == null || expression == base.expression)
502 && (defaultValue == null || defaultValue == base.defaultValue)
503 ) {
504 return base;
505 }
506 return new Parameter(this);
507 }
508
509 }
510
511 }