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.util.DirectoryUtils;
31
32 import static java.util.Objects.requireNonNull;
33
34
35
36
37
38
39
40
41 public class BasedirNameMapper implements NameMapper {
42
43
44
45
46
47
48
49 public static final String CONFIG_PROP_LOCKS_DIR = NamedLockFactoryAdapter.CONFIG_PROPS_PREFIX + "basedir.locksDir";
50
51 public static final String DEFAULT_LOCKS_DIR = ".locks";
52
53 private final NameMapper delegate;
54
55 public BasedirNameMapper(final NameMapper delegate) {
56 this.delegate = requireNonNull(delegate);
57 }
58
59 @Override
60 public boolean isFileSystemFriendly() {
61 return delegate.isFileSystemFriendly();
62 }
63
64 @Override
65 public Collection<String> nameLocks(
66 final RepositorySystemSession session,
67 final Collection<? extends Artifact> artifacts,
68 final Collection<? extends Metadata> metadatas) {
69 try {
70 final Path basedir =
71 DirectoryUtils.resolveDirectory(session, DEFAULT_LOCKS_DIR, CONFIG_PROP_LOCKS_DIR, false);
72
73 return delegate.nameLocks(session, artifacts, metadatas).stream()
74 .map(name -> basedir.resolve(name).toAbsolutePath().toString())
75 .collect(Collectors.toList());
76 } catch (IOException e) {
77 throw new UncheckedIOException(e);
78 }
79 }
80 }