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.Singleton;
24
25 import org.eclipse.aether.ConfigurationProperties;
26 import org.eclipse.aether.RepositorySystemSession;
27 import org.eclipse.aether.repository.LocalRepository;
28 import org.eclipse.aether.repository.LocalRepositoryManager;
29 import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
30 import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
31 import org.eclipse.aether.util.ConfigUtils;
32 import org.eclipse.aether.util.repository.RepositoryIdHelper;
33
34 import static java.util.Objects.requireNonNull;
35
36
37
38
39
40
41
42
43 @Singleton
44 @Named(EnhancedLocalRepositoryManagerFactory.NAME)
45 public class EnhancedLocalRepositoryManagerFactory implements LocalRepositoryManagerFactory {
46 public static final String NAME = "enhanced";
47
48 static final String CONFIG_PROPS_PREFIX = ConfigurationProperties.PREFIX_LRM + NAME + ".";
49
50
51
52
53
54
55
56
57 public static final String CONFIG_PROP_TRACKING_FILENAME = CONFIG_PROPS_PREFIX + "trackingFilename";
58
59 public static final String DEFAULT_TRACKING_FILENAME = "_remote.repositories";
60
61 private float priority = 10.0f;
62
63 private final LocalPathComposer localPathComposer;
64
65 private final TrackingFileManager trackingFileManager;
66
67 private final LocalPathPrefixComposerFactory localPathPrefixComposerFactory;
68
69 @Inject
70 public EnhancedLocalRepositoryManagerFactory(
71 final LocalPathComposer localPathComposer,
72 final TrackingFileManager trackingFileManager,
73 final LocalPathPrefixComposerFactory localPathPrefixComposerFactory) {
74 this.localPathComposer = requireNonNull(localPathComposer);
75 this.trackingFileManager = requireNonNull(trackingFileManager);
76 this.localPathPrefixComposerFactory = requireNonNull(localPathPrefixComposerFactory);
77 }
78
79 @Override
80 public LocalRepositoryManager newInstance(RepositorySystemSession session, LocalRepository repository)
81 throws NoLocalRepositoryManagerException {
82 requireNonNull(session, "session cannot be null");
83 requireNonNull(repository, "repository cannot be null");
84
85 String trackingFilename = ConfigUtils.getString(session, "", CONFIG_PROP_TRACKING_FILENAME);
86 if (trackingFilename.isEmpty()
87 || trackingFilename.contains("/")
88 || trackingFilename.contains("\\")
89 || trackingFilename.contains("..")) {
90 trackingFilename = DEFAULT_TRACKING_FILENAME;
91 }
92
93 if ("".equals(repository.getContentType()) || "default".equals(repository.getContentType())) {
94 return new EnhancedLocalRepositoryManager(
95 repository.getBasePath(),
96 localPathComposer,
97 RepositoryIdHelper.cachedIdToPathSegment(session),
98 trackingFilename,
99 trackingFileManager,
100 localPathPrefixComposerFactory.createComposer(session));
101 } else {
102 throw new NoLocalRepositoryManagerException(repository);
103 }
104 }
105
106 @Override
107 public float getPriority() {
108 return priority;
109 }
110
111
112
113
114
115
116
117 public EnhancedLocalRepositoryManagerFactory setPriority(float priority) {
118 this.priority = priority;
119 return this;
120 }
121 }