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