1 // =================== DO NOT EDIT THIS FILE ====================
2 // Generated by Modello Velocity from model.vm
3 // template, any modifications will be overwritten.
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.Set;
12 import org.apache.maven.api.annotations.Experimental;
13 import org.apache.maven.api.annotations.Generated;
14 import org.apache.maven.api.annotations.Immutable;
15 import org.apache.maven.api.annotations.Nonnull;
16 import org.apache.maven.api.annotations.NotThreadSafe;
17 import org.apache.maven.api.annotations.ThreadSafe;
18
19 /**
20 * Describes a component requirement.
21 */
22 @Experimental
23 @Generated @ThreadSafe @Immutable
24 public class Requirement
25 implements Serializable
26 {
27 /**
28 *
29 */
30 final String role;
31 /**
32 *
33 */
34 final String roleHint;
35 /**
36 * The field name which has this requirement.
37 */
38 final String fieldName;
39
40 /**
41 * Constructor for this class, to be called from its subclasses and {@link Builder}.
42 * @see Builder#build()
43 */
44 protected Requirement(Builder builder) {
45 this.role = builder.role != null ? builder.role : (builder.base != null ? builder.base.role : null);
46 this.roleHint = builder.roleHint != null ? builder.roleHint : (builder.base != null ? builder.base.roleHint : null);
47 this.fieldName = builder.fieldName != null ? builder.fieldName : (builder.base != null ? builder.base.fieldName : null);
48 }
49
50 /**
51 *
52 *
53 * @return a {@code String}
54 */
55 public String getRole() {
56 return this.role;
57 }
58
59 /**
60 *
61 *
62 * @return a {@code String}
63 */
64 public String getRoleHint() {
65 return this.roleHint;
66 }
67
68 /**
69 * The field name which has this requirement.
70 *
71 * @return a {@code String}
72 */
73 public String getFieldName() {
74 return this.fieldName;
75 }
76
77 /**
78 * Creates a new builder with this object as the basis.
79 *
80 * @return a {@code Builder}
81 */
82 @Nonnull
83 public Builder with() {
84 return newBuilder(this);
85 }
86 /**
87 * Creates a new {@code Requirement} instance using the specified role.
88 *
89 * @param role the new {@code String} to use
90 * @return a {@code Requirement} with the specified role
91 */
92 @Nonnull
93 public Requirement withRole(String role) {
94 return newBuilder(this, true).role(role).build();
95 }
96 /**
97 * Creates a new {@code Requirement} instance using the specified roleHint.
98 *
99 * @param roleHint the new {@code String} to use
100 * @return a {@code Requirement} with the specified roleHint
101 */
102 @Nonnull
103 public Requirement withRoleHint(String roleHint) {
104 return newBuilder(this, true).roleHint(roleHint).build();
105 }
106 /**
107 * Creates a new {@code Requirement} instance using the specified fieldName.
108 *
109 * @param fieldName the new {@code String} to use
110 * @return a {@code Requirement} with the specified fieldName
111 */
112 @Nonnull
113 public Requirement withFieldName(String fieldName) {
114 return newBuilder(this, true).fieldName(fieldName).build();
115 }
116
117 /**
118 * Creates a new {@code Requirement} instance.
119 * Equivalent to {@code newInstance(true)}.
120 * @see #newInstance(boolean)
121 *
122 * @return a new {@code Requirement}
123 */
124 @Nonnull
125 public static Requirement newInstance() {
126 return newInstance(true);
127 }
128
129 /**
130 * Creates a new {@code Requirement} instance using default values or not.
131 * Equivalent to {@code newBuilder(withDefaults).build()}.
132 *
133 * @param withDefaults the boolean indicating whether default values should be used
134 * @return a new {@code Requirement}
135 */
136 @Nonnull
137 public static Requirement newInstance(boolean withDefaults) {
138 return newBuilder(withDefaults).build();
139 }
140
141 /**
142 * Creates a new {@code Requirement} builder instance.
143 * Equivalent to {@code newBuilder(true)}.
144 * @see #newBuilder(boolean)
145 *
146 * @return a new {@code Builder}
147 */
148 @Nonnull
149 public static Builder newBuilder() {
150 return newBuilder(true);
151 }
152
153 /**
154 * Creates a new {@code Requirement} builder instance using default values or not.
155 *
156 * @param withDefaults the boolean indicating whether default values should be used
157 * @return a new {@code Builder}
158 */
159 @Nonnull
160 public static Builder newBuilder(boolean withDefaults) {
161 return new Builder(withDefaults);
162 }
163
164 /**
165 * Creates a new {@code Requirement} builder instance using the specified object as a basis.
166 * Equivalent to {@code newBuilder(from, false)}.
167 *
168 * @param from the {@code Requirement} instance to use as a basis
169 * @return a new {@code Builder}
170 */
171 @Nonnull
172 public static Builder newBuilder(Requirement from) {
173 return newBuilder(from, false);
174 }
175
176 /**
177 * Creates a new {@code Requirement} builder instance using the specified object as a basis.
178 *
179 * @param from the {@code Requirement} instance to use as a basis
180 * @param forceCopy the boolean indicating if a copy should be forced
181 * @return a new {@code Builder}
182 */
183 @Nonnull
184 public static Builder newBuilder(Requirement from, boolean forceCopy) {
185 return new Builder(from, forceCopy);
186 }
187
188 /**
189 * Builder class used to create Requirement instances.
190 * @see #with()
191 * @see #newBuilder()
192 */
193 @NotThreadSafe
194 public static class Builder
195 {
196 Requirement base;
197 String role;
198 String roleHint;
199 String fieldName;
200
201 protected Builder(boolean withDefaults) {
202 if (withDefaults) {
203 }
204 }
205
206 protected Builder(Requirement base, boolean forceCopy) {
207 if (forceCopy) {
208 this.role = base.role;
209 this.roleHint = base.roleHint;
210 this.fieldName = base.fieldName;
211 } else {
212 this.base = base;
213 }
214 }
215
216 @Nonnull
217 public Builder role(String role) {
218 this.role = role;
219 return this;
220 }
221
222 @Nonnull
223 public Builder roleHint(String roleHint) {
224 this.roleHint = roleHint;
225 return this;
226 }
227
228 @Nonnull
229 public Builder fieldName(String fieldName) {
230 this.fieldName = fieldName;
231 return this;
232 }
233
234
235 @Nonnull
236 public Requirement build() {
237 // this method should not contain any logic other than creating (or reusing) an object in order to ease subclassing
238 if (base != null
239 && (role == null || role == base.role)
240 && (roleHint == null || roleHint == base.roleHint)
241 && (fieldName == null || fieldName == base.fieldName)
242 ) {
243 return base;
244 }
245 return new Requirement(this);
246 }
247 }
248
249 }