1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.aether.named.ipc;
20
21 import javax.inject.Inject;
22 import javax.inject.Named;
23 import javax.inject.Singleton;
24
25 import java.nio.file.Path;
26 import java.nio.file.Paths;
27 import java.util.Collection;
28 import java.util.stream.Collectors;
29
30 import org.eclipse.aether.named.NamedLock;
31 import org.eclipse.aether.named.NamedLockKey;
32 import org.eclipse.aether.named.support.NamedLockFactorySupport;
33 import org.eclipse.aether.named.support.NamedLockSupport;
34 import org.eclipse.aether.util.StringDigestUtil;
35
36 import static java.util.Objects.requireNonNull;
37
38
39
40
41
42
43 @Singleton
44 @Named(IpcNamedLockFactory.NAME)
45 public class IpcNamedLockFactory extends NamedLockFactorySupport {
46 public static final String NAME = "ipc";
47
48 protected final IpcClient client;
49
50 @Inject
51 public IpcNamedLockFactory() {
52 this(Paths.get(System.getProperty("user.home")).resolve(".ipc-sync"));
53 }
54
55 public IpcNamedLockFactory(Path ipcHome) {
56 requireNonNull(ipcHome);
57 Path repository = ipcHome.resolve("repository");
58 Path logPath = ipcHome.resolve("log");
59 this.client = new IpcClient(repository, logPath, null);
60 }
61
62 @Override
63 protected NamedLock doGetLock(Collection<NamedLockKey> keys) {
64 StringDigestUtil sha1 = StringDigestUtil.sha1();
65 keys.forEach(k -> sha1.update(k.name()));
66 NamedLockKey key = NamedLockKey.of(
67 sha1.digest(),
68 keys.stream()
69 .map(NamedLockKey::resources)
70 .flatMap(Collection::stream)
71 .collect(Collectors.toList()));
72 return getLockAndRefTrack(
73 key,
74 () -> new IpcNamedLock(
75 key, this, client, keys.stream().map(NamedLockKey::name).collect(Collectors.toList())));
76 }
77
78 @Override
79 protected NamedLockSupport createLock(NamedLockKey key) {
80 throw new IllegalStateException("should not get here");
81 }
82
83 @Override
84 protected void doShutdown() {
85 client.close();
86 }
87 }