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;
20
21 import javax.inject.Inject;
22 import javax.inject.Named;
23 import javax.inject.Provider;
24 import javax.inject.Singleton;
25
26 import java.util.HashMap;
27 import java.util.Map;
28 import java.util.concurrent.TimeUnit;
29
30 import org.eclipse.aether.ConfigurationProperties;
31 import org.eclipse.aether.impl.NamedLockFactorySelector;
32 import org.eclipse.aether.named.NamedLockFactory;
33 import org.eclipse.aether.util.ConfigUtils;
34
35
36
37
38
39
40 @Singleton
41 @Named
42 public class TrackingFileManagerProvider implements Provider<TrackingFileManager> {
43 public static final String CONFIG_PROPS_PREFIX = ConfigurationProperties.PREFIX_SYSTEM + "trackingFileManager.";
44
45
46
47
48
49
50
51
52
53
54
55 public static final String CONFIG_PROP_TRACKING_FILE_MANAGER_NAME = CONFIG_PROPS_PREFIX + "name";
56
57 public static final String DEFAULT_TRACKING_FILE_MANAGER_NAME = "legacy";
58
59 private final TrackingFileManager trackingFileManager;
60
61
62
63
64 public TrackingFileManagerProvider() {
65 this.trackingFileManager = new LegacyTrackingFileManager();
66 }
67
68
69
70
71 @Inject
72 public TrackingFileManagerProvider(NamedLockFactorySelector selector) {
73
74 Map<String, String> config = new HashMap<>();
75 for (String name : System.getProperties().stringPropertyNames()) {
76 config.put(name, System.getProperty(name));
77 }
78 String tfmName = ConfigUtils.getString(
79 config, DEFAULT_TRACKING_FILE_MANAGER_NAME, CONFIG_PROP_TRACKING_FILE_MANAGER_NAME);
80 if ("legacy".equals(tfmName)) {
81 this.trackingFileManager = new LegacyTrackingFileManager();
82 } else if ("namedLocks".equals(tfmName)) {
83 NamedLockFactory factory = selector.getNamedLockFactory(config);
84 long time = selector.getLockWaitTime(config);
85 TimeUnit timeUnit = selector.getLockWaitTimeUnit(config);
86 this.trackingFileManager = new NamedLocksTrackingFileManager(factory, time, timeUnit);
87 } else {
88 throw new IllegalArgumentException("Unknown tracking file manager name: " + tfmName);
89 }
90 }
91
92 @Override
93 public TrackingFileManager get() {
94 return trackingFileManager;
95 }
96 }