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.util.Collection;
22 import java.util.Collections;
23 import java.util.Date;
24 import java.util.LinkedHashMap;
25 import java.util.Map;
26 import org.eclipse.aether.RepositorySystemSession;
27 import org.eclipse.aether.artifact.Artifact;
28 import org.eclipse.aether.deployment.DeployRequest;
29 import org.eclipse.aether.impl.MetadataGenerator;
30 import org.eclipse.aether.metadata.Metadata;
31 import org.eclipse.aether.util.ConfigUtils;
32
33
34
35
36
37
38 class RemoteSnapshotMetadataGenerator implements MetadataGenerator {
39
40 private final Map<Object, RemoteSnapshotMetadata> snapshots;
41
42 private final boolean legacyFormat;
43
44 private final Date timestamp;
45
46 RemoteSnapshotMetadataGenerator(RepositorySystemSession session, DeployRequest request) {
47 legacyFormat = ConfigUtils.getBoolean(session, false, "maven.metadata.legacy");
48
49 timestamp = (Date) ConfigUtils.getObject(session, new Date(), "maven.startTime");
50
51 snapshots = new LinkedHashMap<>();
52
53
54
55
56
57
58
59 for (Metadata metadata : request.getMetadata()) {
60 if (metadata instanceof RemoteSnapshotMetadata) {
61 RemoteSnapshotMetadata snapshotMetadata = (RemoteSnapshotMetadata) metadata;
62 snapshots.put(snapshotMetadata.getKey(), snapshotMetadata);
63 }
64 }
65 }
66
67 public Collection<? extends Metadata> prepare(Collection<? extends Artifact> artifacts) {
68 for (Artifact artifact : artifacts) {
69 if (artifact.isSnapshot()) {
70 Object key = RemoteSnapshotMetadata.getKey(artifact);
71 RemoteSnapshotMetadata snapshotMetadata = snapshots.get(key);
72 if (snapshotMetadata == null) {
73 snapshotMetadata = new RemoteSnapshotMetadata(artifact, legacyFormat, timestamp);
74 snapshots.put(key, snapshotMetadata);
75 }
76 snapshotMetadata.bind(artifact);
77 }
78 }
79
80 return snapshots.values();
81 }
82
83 public Artifact transformArtifact(Artifact artifact) {
84 if (artifact.isSnapshot() && artifact.getVersion().equals(artifact.getBaseVersion())) {
85 Object key = RemoteSnapshotMetadata.getKey(artifact);
86 RemoteSnapshotMetadata snapshotMetadata = snapshots.get(key);
87 if (snapshotMetadata != null) {
88 artifact = artifact.setVersion(snapshotMetadata.getExpandedVersion(artifact));
89 }
90 }
91
92 return artifact;
93 }
94
95 public Collection<? extends Metadata> finish(Collection<? extends Artifact> artifacts) {
96 return Collections.emptyList();
97 }
98 }