View Javadoc
1   // =================== DO NOT EDIT THIS FILE ====================
2   //   Generated by Maven, any modifications will be overwritten.
3   // ==============================================================
4   package org.apache.maven.api.model;
5   
6   import java.io.Serializable;
7   import java.util.Collections;
8   import java.util.HashMap;
9   import java.util.Map;
10  import org.apache.maven.api.annotations.Experimental;
11  import org.apache.maven.api.annotations.Generated;
12  import org.apache.maven.api.annotations.Immutable;
13  import org.apache.maven.api.annotations.Nonnull;
14  import org.apache.maven.api.annotations.NotThreadSafe;
15  import org.apache.maven.api.annotations.ThreadSafe;
16  
17  /**
18   * This is the property specification used to activate a profile. If the value field
19   * is empty, then the existence of the named property will activate the profile, otherwise it
20   * does a case-sensitive match against the property value as well.
21   */
22  @Experimental
23  @Generated @ThreadSafe @Immutable
24  public class ActivationProperty
25      implements Serializable, InputLocationTracker
26  {
27      /**
28       * The name of the property to be used to activate a profile.
29       */
30      final String name;
31      /**
32       * The value of the property required to activate a profile.
33       */
34      final String value;
35      /** Location of the xml element for this object. */
36      final InputLocation location;
37      /** Location of the xml element for the field name. */
38      final InputLocation nameLocation;
39      /** Location of the xml element for the field value. */
40      final InputLocation valueLocation;
41      /** Other locations */
42      final Map<Object, InputLocation> locations;
43  
44      /**
45        * Constructor for this class, package protected.
46        * @see Builder#build()
47        */
48      ActivationProperty(
49          String name,
50          String value,
51          Map<Object, InputLocation> locations,
52          InputLocation location,
53          InputLocation nameLocation,
54          InputLocation valueLocation
55      )
56      {
57          this.name = name;
58          this.value = value;
59          this.locations = ImmutableCollections.copy( locations );
60          this.location = location;
61          this.nameLocation = nameLocation;
62          this.valueLocation = valueLocation;
63      }
64  
65      /**
66       * The name of the property to be used to activate a profile.
67       *
68       * @return a {@code String}
69       */
70      public String getName()
71      {
72          return this.name;
73      }
74  
75      /**
76       * The value of the property required to activate a profile.
77       *
78       * @return a {@code String}
79       */
80      public String getValue()
81      {
82          return this.value;
83      }
84  
85      /**
86       * Gets the location of the specified field in the input source.
87       */
88      public InputLocation getLocation( Object key )
89      {
90          if ( key instanceof String )
91          {
92              switch ( ( String ) key )
93              {
94                  case "":
95                      return location;
96                  case "name":
97                      return nameLocation;
98                  case "value":
99                      return valueLocation;
100             }
101         }
102         return locations != null ? locations.get( key ) : null;
103     }
104 
105     /**
106      * Creates a new builder with this object as the basis.
107      *
108      * @return a {@code Builder}
109      */
110     @Nonnull
111     public Builder with()
112     {
113         return newBuilder( this );
114     }
115     /**
116      * Creates a new {@code ActivationProperty} instance using the specified name.
117      *
118      * @param name the new {@code String} to use
119      * @return a {@code ActivationProperty} with the specified name
120      */
121     @Nonnull
122     public ActivationProperty withName( String name )
123     {
124         return with().name( name ).build();
125     }
126     /**
127      * Creates a new {@code ActivationProperty} instance using the specified value.
128      *
129      * @param value the new {@code String} to use
130      * @return a {@code ActivationProperty} with the specified value
131      */
132     @Nonnull
133     public ActivationProperty withValue( String value )
134     {
135         return with().value( value ).build();
136     }
137 
138     /**
139      * Creates a new {@code ActivationProperty} instance.
140      * Equivalent to {@code newInstance( true )}.
141      * @see #newInstance(boolean)
142      *
143      * @return a new {@code ActivationProperty}
144      */
145     @Nonnull
146     public static ActivationProperty newInstance()
147     {
148         return newInstance( true );
149     }
150 
151     /**
152      * Creates a new {@code ActivationProperty} instance using default values or not.
153      * Equivalent to {@code newBuilder( withDefaults ).build()}.
154      *
155      * @param withDefaults the boolean indicating whether default values should be used
156      * @return a new {@code ActivationProperty}
157      */
158     @Nonnull
159     public static ActivationProperty newInstance( boolean withDefaults )
160     {
161         return newBuilder( withDefaults ).build();
162     }
163 
164     /**
165      * Creates a new {@code ActivationProperty} builder instance.
166      * Equivalent to {@code newBuilder( true )}.
167      * @see #newBuilder(boolean)
168      *
169      * @return a new {@code Builder}
170      */
171     @Nonnull
172     public static Builder newBuilder()
173     {
174         return newBuilder( true );
175     }
176 
177     /**
178      * Creates a new {@code ActivationProperty} builder instance using default values or not.
179      *
180      * @param withDefaults the boolean indicating whether default values should be used
181      * @return a new {@code Builder}
182      */
183     @Nonnull
184     public static Builder newBuilder( boolean withDefaults )
185     {
186         return new Builder( withDefaults );
187     }
188 
189     /**
190      * Creates a new {@code ActivationProperty} builder instance using the specified object as a basis.
191      * Equivalent to {@code newBuilder( from, false )}.
192      *
193      * @param from the {@code ActivationProperty} instance to use as a basis
194      * @return a new {@code Builder}
195      */
196     @Nonnull
197     public static Builder newBuilder( ActivationProperty from )
198     {
199         return newBuilder( from, false );
200     }
201 
202     /**
203      * Creates a new {@code ActivationProperty} builder instance using the specified object as a basis.
204      *
205      * @param from the {@code ActivationProperty} instance to use as a basis
206      * @param forceCopy the boolean indicating if a copy should be forced
207      * @return a new {@code Builder}
208      */
209     @Nonnull
210     public static Builder newBuilder( ActivationProperty from, boolean forceCopy )
211     {
212         return new Builder( from, forceCopy );
213     }
214 
215     /**
216      * Builder class used to create ActivationProperty instances.
217      * @see #with()
218      * @see #newBuilder()
219      */
220     @NotThreadSafe
221     public static class Builder
222     {
223         ActivationProperty base;
224         String name;
225         String value;
226         Map<Object, InputLocation> locations;
227 
228         Builder( boolean withDefaults )
229         {
230             if ( withDefaults )
231             {
232             }
233         }
234 
235         Builder( ActivationProperty base, boolean forceCopy )
236         {
237             if ( forceCopy )
238             {
239                 this.name = base.name;
240                 this.value = base.value;
241             }
242             else
243             {
244                 this.base = base;
245             }
246         }
247 
248         @Nonnull
249         public Builder name( String name )
250         {
251             this.name = name;
252             return this;
253         }
254 
255         @Nonnull
256         public Builder value( String value )
257         {
258             this.value = value;
259             return this;
260         }
261 
262 
263         @Nonnull
264         public Builder location( Object key, InputLocation location )
265         {
266             if ( location != null )
267             {
268                 if ( this.locations == null )
269                 {
270                     this.locations = new HashMap<>();
271                 }
272                 this.locations.put( key, location );
273             }
274             return this;
275         }
276 
277         @Nonnull
278         public ActivationProperty build()
279         {
280             if ( base != null
281                     && ( name == null || name == base.name )
282                     && ( value == null || value == base.value )
283             )
284             {
285                 return base;
286             }
287             Map<Object, InputLocation> locations = null;
288             InputLocation location = null;
289             InputLocation nameLocation = null;
290             InputLocation valueLocation = null;
291             if ( this.locations != null )
292             {
293                 locations = this.locations;
294                 location = locations.remove( "" );
295                 nameLocation = locations.remove( "name" );
296                 valueLocation = locations.remove( "value" );
297             }
298             return new ActivationProperty(
299                 name != null ? name : ( base != null ? base.name : null ),
300                 value != null ? value : ( base != null ? base.value : null ),
301                 locations != null ? locations : ( base != null ? base.locations : null ),
302                 location != null ? location : ( base != null ? base.location : null ),
303                 nameLocation != null ? nameLocation : ( base != null ? base.nameLocation : null ),
304                 valueLocation != null ? valueLocation : ( base != null ? base.valueLocation : null )
305             );
306         }
307     }
308 
309 }