1
2
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
19
20
21
22 @Experimental
23 @Generated @ThreadSafe @Immutable
24 public class ActivationProperty
25 implements Serializable, InputLocationTracker
26 {
27
28
29
30 final String name;
31
32
33
34 final String value;
35
36 final InputLocation location;
37
38 final InputLocation nameLocation;
39
40 final InputLocation valueLocation;
41
42 final Map<Object, InputLocation> locations;
43
44
45
46
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
67
68
69
70 public String getName()
71 {
72 return this.name;
73 }
74
75
76
77
78
79
80 public String getValue()
81 {
82 return this.value;
83 }
84
85
86
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
107
108
109
110 @Nonnull
111 public Builder with()
112 {
113 return newBuilder( this );
114 }
115
116
117
118
119
120
121 @Nonnull
122 public ActivationProperty withName( String name )
123 {
124 return with().name( name ).build();
125 }
126
127
128
129
130
131
132 @Nonnull
133 public ActivationProperty withValue( String value )
134 {
135 return with().value( value ).build();
136 }
137
138
139
140
141
142
143
144
145 @Nonnull
146 public static ActivationProperty newInstance()
147 {
148 return newInstance( true );
149 }
150
151
152
153
154
155
156
157
158 @Nonnull
159 public static ActivationProperty newInstance( boolean withDefaults )
160 {
161 return newBuilder( withDefaults ).build();
162 }
163
164
165
166
167
168
169
170
171 @Nonnull
172 public static Builder newBuilder()
173 {
174 return newBuilder( true );
175 }
176
177
178
179
180
181
182
183 @Nonnull
184 public static Builder newBuilder( boolean withDefaults )
185 {
186 return new Builder( withDefaults );
187 }
188
189
190
191
192
193
194
195
196 @Nonnull
197 public static Builder newBuilder( ActivationProperty from )
198 {
199 return newBuilder( from, false );
200 }
201
202
203
204
205
206
207
208
209 @Nonnull
210 public static Builder newBuilder( ActivationProperty from, boolean forceCopy )
211 {
212 return new Builder( from, forceCopy );
213 }
214
215
216
217
218
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 }