1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.repository.internal;
20
21 import java.io.File;
22 import java.util.ArrayList;
23 import java.util.Collection;
24 import java.util.Date;
25 import java.util.LinkedHashSet;
26
27 import org.apache.maven.artifact.repository.metadata.Metadata;
28 import org.apache.maven.artifact.repository.metadata.Versioning;
29 import org.eclipse.aether.artifact.Artifact;
30 import org.eclipse.aether.artifact.ArtifactProperties;
31
32
33
34
35 final class VersionsMetadata extends MavenMetadata {
36
37 private final Artifact artifact;
38
39 VersionsMetadata(Artifact artifact, Date timestamp) {
40 super(createRepositoryMetadata(artifact), null, timestamp);
41 this.artifact = artifact;
42 }
43
44 VersionsMetadata(Artifact artifact, File file, Date timestamp) {
45 super(createRepositoryMetadata(artifact), file, timestamp);
46 this.artifact = artifact;
47 }
48
49 private static Metadata createRepositoryMetadata(Artifact artifact) {
50 Metadata metadata = new Metadata();
51 metadata.setGroupId(artifact.getGroupId());
52 metadata.setArtifactId(artifact.getArtifactId());
53
54 Versioning versioning = new Versioning();
55 versioning.addVersion(artifact.getBaseVersion());
56 if (!artifact.isSnapshot()) {
57 versioning.setRelease(artifact.getBaseVersion());
58 }
59 if ("maven-plugin".equals(artifact.getProperty(ArtifactProperties.TYPE, ""))) {
60 versioning.setLatest(artifact.getBaseVersion());
61 }
62
63 metadata.setVersioning(versioning);
64
65 return metadata;
66 }
67
68 @Override
69 protected void merge(Metadata recessive) {
70 Versioning versioning = metadata.getVersioning();
71 versioning.setLastUpdatedTimestamp(timestamp);
72
73 if (recessive.getVersioning() != null) {
74 if (versioning.getLatest() == null) {
75 versioning.setLatest(recessive.getVersioning().getLatest());
76 }
77 if (versioning.getRelease() == null) {
78 versioning.setRelease(recessive.getVersioning().getRelease());
79 }
80
81 Collection<String> versions =
82 new LinkedHashSet<>(recessive.getVersioning().getVersions());
83 versions.addAll(versioning.getVersions());
84 versioning.setVersions(new ArrayList<>(versions));
85 }
86 }
87
88 public Object getKey() {
89 return getGroupId() + ':' + getArtifactId();
90 }
91
92 public static Object getKey(Artifact artifact) {
93 return artifact.getGroupId() + ':' + artifact.getArtifactId();
94 }
95
96 public MavenMetadata setFile(File file) {
97 return new VersionsMetadata(artifact, file, timestamp);
98 }
99
100 public String getGroupId() {
101 return artifact.getGroupId();
102 }
103
104 public String getArtifactId() {
105 return artifact.getArtifactId();
106 }
107
108 public String getVersion() {
109 return "";
110 }
111
112 public Nature getNature() {
113 return artifact.isSnapshot() ? Nature.RELEASE_OR_SNAPSHOT : Nature.RELEASE;
114 }
115 }