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