View Javadoc
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 }