1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.impl.resolver;
20
21 import java.time.Instant;
22 import java.util.Collection;
23 import java.util.Collections;
24 import java.util.LinkedHashMap;
25 import java.util.Map;
26
27 import org.apache.maven.api.Constants;
28 import org.apache.maven.api.MonotonicClock;
29 import org.eclipse.aether.RepositorySystemSession;
30 import org.eclipse.aether.artifact.Artifact;
31 import org.eclipse.aether.impl.MetadataGenerator;
32 import org.eclipse.aether.installation.InstallRequest;
33 import org.eclipse.aether.metadata.Metadata;
34 import org.eclipse.aether.util.ConfigUtils;
35
36
37
38
39
40
41 class LocalSnapshotMetadataGenerator implements MetadataGenerator {
42
43 private final Map<Object, LocalSnapshotMetadata> snapshots;
44
45 private final Instant timestamp;
46
47 LocalSnapshotMetadataGenerator(RepositorySystemSession session, InstallRequest request) {
48 timestamp = (Instant) ConfigUtils.getObject(session, MonotonicClock.now(), Constants.MAVEN_START_INSTANT);
49
50 snapshots = new LinkedHashMap<>();
51 }
52
53 @Override
54 public Collection<? extends Metadata> prepare(Collection<? extends Artifact> artifacts) {
55 for (Artifact artifact : artifacts) {
56 if (artifact.isSnapshot()) {
57 Object key = LocalSnapshotMetadata.getKey(artifact);
58 LocalSnapshotMetadata snapshotMetadata = snapshots.get(key);
59 if (snapshotMetadata == null) {
60 snapshotMetadata = new LocalSnapshotMetadata(artifact, timestamp);
61 snapshots.put(key, snapshotMetadata);
62 }
63 snapshotMetadata.bind(artifact);
64 }
65 }
66
67 return Collections.emptyList();
68 }
69
70 @Override
71 public Artifact transformArtifact(Artifact artifact) {
72 return artifact;
73 }
74
75 @Override
76 public Collection<? extends Metadata> finish(Collection<? extends Artifact> artifacts) {
77 return snapshots.values();
78 }
79 }