1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package org.apache.maven.artifact.repository.metadata;
25
26
27
28
29
30
31 @SuppressWarnings( "all" )
32 public class Metadata
33 implements java.io.Serializable, java.lang.Cloneable
34 {
35
36
37
38
39
40
41
42
43 private String modelVersion;
44
45
46
47
48
49 private String groupId;
50
51
52
53
54
55 private String artifactId;
56
57
58
59
60
61 private Versioning versioning;
62
63
64
65
66
67
68 private String version;
69
70
71
72
73 private java.util.List<Plugin> plugins;
74
75
76
77
78 private String modelEncoding = "UTF-8";
79
80
81
82
83
84
85
86
87
88
89
90 public void addPlugin( Plugin plugin )
91 {
92 getPlugins().add( plugin );
93 }
94
95
96
97
98
99
100 public Metadata clone()
101 {
102 try
103 {
104 Metadata copy = (Metadata) super.clone();
105
106 if ( this.versioning != null )
107 {
108 copy.versioning = (Versioning) this.versioning.clone();
109 }
110
111 if ( this.plugins != null )
112 {
113 copy.plugins = new java.util.ArrayList<Plugin>();
114 for ( Plugin item : this.plugins )
115 {
116 copy.plugins.add( ( (Plugin) item).clone() );
117 }
118 }
119
120 return copy;
121 }
122 catch ( java.lang.Exception ex )
123 {
124 throw (java.lang.RuntimeException) new java.lang.UnsupportedOperationException( getClass().getName()
125 + " does not support clone()" ).initCause( ex );
126 }
127 }
128
129
130
131
132
133
134
135 public String getArtifactId()
136 {
137 return this.artifactId;
138 }
139
140
141
142
143
144
145
146 public String getGroupId()
147 {
148 return this.groupId;
149 }
150
151
152
153
154
155
156 public String getModelEncoding()
157 {
158 return this.modelEncoding;
159 }
160
161
162
163
164
165
166 public String getModelVersion()
167 {
168 return this.modelVersion;
169 }
170
171
172
173
174
175
176 public java.util.List<Plugin> getPlugins()
177 {
178 if ( this.plugins == null )
179 {
180 this.plugins = new java.util.ArrayList<Plugin>();
181 }
182
183 return this.plugins;
184 }
185
186
187
188
189
190
191
192
193 public String getVersion()
194 {
195 return this.version;
196 }
197
198
199
200
201
202
203
204 public Versioning getVersioning()
205 {
206 return this.versioning;
207 }
208
209
210
211
212
213
214 public void removePlugin( Plugin plugin )
215 {
216 getPlugins().remove( plugin );
217 }
218
219
220
221
222
223
224
225 public void setArtifactId( String artifactId )
226 {
227 this.artifactId = artifactId;
228 }
229
230
231
232
233
234
235
236 public void setGroupId( String groupId )
237 {
238 this.groupId = groupId;
239 }
240
241
242
243
244
245
246 public void setModelEncoding( String modelEncoding )
247 {
248 this.modelEncoding = modelEncoding;
249 }
250
251
252
253
254
255
256 public void setModelVersion( String modelVersion )
257 {
258 this.modelVersion = modelVersion;
259 }
260
261
262
263
264
265
266
267 public void setPlugins( java.util.List<Plugin> plugins )
268 {
269 this.plugins = plugins;
270 }
271
272
273
274
275
276
277
278
279 public void setVersion( String version )
280 {
281 this.version = version;
282 }
283
284
285
286
287
288
289
290 public void setVersioning( Versioning versioning )
291 {
292 this.versioning = versioning;
293 }
294
295
296 private String getSnapshotVersionKey( SnapshotVersion sv )
297 {
298 return sv.getClassifier() + ":" + sv.getExtension();
299 }
300
301 public boolean merge( Metadata sourceMetadata )
302 {
303 boolean changed = false;
304
305 for ( Plugin plugin : sourceMetadata.getPlugins() )
306 {
307 boolean found = false;
308
309 for ( Plugin preExisting : getPlugins() )
310 {
311 if ( java.util.Objects.equals( preExisting.getPrefix(), plugin.getPrefix() ) )
312 {
313 found = true;
314 break;
315 }
316 }
317
318 if ( !found )
319 {
320 Plugin mappedPlugin = new Plugin();
321
322 mappedPlugin.setArtifactId( plugin.getArtifactId() );
323
324 mappedPlugin.setPrefix( plugin.getPrefix() );
325
326 mappedPlugin.setName( plugin.getName() );
327
328 addPlugin( mappedPlugin );
329
330 changed = true;
331 }
332 }
333
334 Versioning versioning = sourceMetadata.getVersioning();
335 if ( versioning != null )
336 {
337 Versioning v = getVersioning();
338 if ( v == null )
339 {
340 v = new Versioning();
341 setVersioning( v );
342 changed = true;
343 }
344
345 for ( String version : versioning.getVersions() )
346 {
347 if ( !v.getVersions().contains( version ) )
348 {
349 changed = true;
350 v.getVersions().add( version );
351 }
352 }
353
354 if ( "null".equals( versioning.getLastUpdated() ) )
355 {
356 versioning.setLastUpdated( null );
357 }
358
359 if ( "null".equals( v.getLastUpdated() ) )
360 {
361 v.setLastUpdated( null );
362 }
363
364 if ( versioning.getLastUpdated() == null || versioning.getLastUpdated().length() == 0 )
365 {
366
367 versioning.setLastUpdated( v.getLastUpdated() );
368 }
369
370 if ( v.getLastUpdated() == null || v.getLastUpdated().length() == 0
371 || versioning.getLastUpdated().compareTo( v.getLastUpdated() ) >= 0 )
372 {
373 changed = true;
374 v.setLastUpdated( versioning.getLastUpdated() );
375
376 if ( versioning.getRelease() != null )
377 {
378 changed = true;
379 v.setRelease( versioning.getRelease() );
380 }
381 if ( versioning.getLatest() != null )
382 {
383 changed = true;
384 v.setLatest( versioning.getLatest() );
385 }
386
387 Snapshot s = v.getSnapshot();
388 Snapshot snapshot = versioning.getSnapshot();
389 if ( snapshot != null )
390 {
391 boolean updateSnapshotVersions = false;
392 if ( s == null )
393 {
394 s = new Snapshot();
395 v.setSnapshot( s );
396 changed = true;
397 updateSnapshotVersions = true;
398 }
399
400
401 if ( s.getTimestamp() == null ? snapshot.getTimestamp() != null
402 : !s.getTimestamp().equals( snapshot.getTimestamp() ) )
403 {
404 s.setTimestamp( snapshot.getTimestamp() );
405 changed = true;
406 updateSnapshotVersions = true;
407 }
408 if ( s.getBuildNumber() != snapshot.getBuildNumber() )
409 {
410 s.setBuildNumber( snapshot.getBuildNumber() );
411 changed = true;
412 }
413 if ( s.isLocalCopy() != snapshot.isLocalCopy() )
414 {
415 s.setLocalCopy( snapshot.isLocalCopy() );
416 changed = true;
417 }
418 if ( updateSnapshotVersions )
419 {
420 java.util.Map<String, SnapshotVersion> versions = new java.util.LinkedHashMap<>();
421
422 if ( !v.getSnapshotVersions().isEmpty() )
423 {
424 for ( SnapshotVersion sv : versioning.getSnapshotVersions() )
425 {
426 String key = getSnapshotVersionKey( sv );
427 versions.put( key, sv );
428 }
429
430 if ( !versions.isEmpty() )
431 {
432 for ( SnapshotVersion sv : v.getSnapshotVersions() )
433 {
434 String key = getSnapshotVersionKey( sv );
435 if ( !versions.containsKey( key ) )
436 {
437 versions.put( key, sv );
438 }
439 }
440 }
441 v.setSnapshotVersions( new java.util.ArrayList<SnapshotVersion>( versions.values() ) );
442 }
443
444 changed = true;
445 }
446 }
447 }
448 }
449 return changed;
450 }
451
452 }