1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.aether.internal.impl.synccontext.named;
20
21 import java.io.IOException;
22 import java.io.UncheckedIOException;
23 import java.nio.file.Path;
24 import java.util.Collection;
25 import java.util.stream.Collectors;
26
27 import org.eclipse.aether.RepositorySystemSession;
28 import org.eclipse.aether.artifact.Artifact;
29 import org.eclipse.aether.metadata.Metadata;
30 import org.eclipse.aether.named.NamedLockKey;
31 import org.eclipse.aether.util.DirectoryUtils;
32
33 import static java.util.Objects.requireNonNull;
34
35
36
37
38
39
40
41
42 public class BasedirNameMapper implements NameMapper {
43
44
45
46
47
48
49
50 public static final String CONFIG_PROP_LOCKS_DIR = NamedLockFactoryAdapter.CONFIG_PROPS_PREFIX + "basedir.locksDir";
51
52 public static final String DEFAULT_LOCKS_DIR = ".locks";
53
54 private final NameMapper delegate;
55
56 private final Path basePath;
57
58 public BasedirNameMapper(final NameMapper delegate) {
59 this(delegate, null);
60 }
61
62
63
64
65
66
67
68
69
70
71 public BasedirNameMapper(final NameMapper delegate, final Path path) {
72 requireNonNull(delegate);
73 if (!delegate.isFileSystemFriendly()) {
74 throw new IllegalArgumentException("delegate must be file-system friendly");
75 }
76 this.delegate = delegate;
77 this.basePath = path;
78 }
79
80 @Override
81 public boolean isFileSystemFriendly() {
82 return true;
83 }
84
85 @Override
86 public Collection<NamedLockKey> nameLocks(
87 final RepositorySystemSession session,
88 final Collection<? extends Artifact> artifacts,
89 final Collection<? extends Metadata> metadatas) {
90 try {
91 final Path basedir = basePath != null
92 ? basePath
93 : DirectoryUtils.resolveDirectory(session, DEFAULT_LOCKS_DIR, CONFIG_PROP_LOCKS_DIR, false);
94
95 return delegate.nameLocks(session, artifacts, metadatas).stream()
96 .map(k -> NamedLockKey.of(
97 basedir.resolve(k.name()).toAbsolutePath().toUri().toASCIIString(), k.resources()))
98 .collect(Collectors.toList());
99 } catch (IOException e) {
100 throw new UncheckedIOException(e);
101 }
102 }
103 }