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.spi.remoterepo.RepositoryKeyFunctionFactory;
32 import org.eclipse.aether.util.ConfigUtils;
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 private final RepositoryKeyFunctionFactory repositoryKeyFunctionFactory;
70
71 @Inject
72 public EnhancedLocalRepositoryManagerFactory(
73 final LocalPathComposer localPathComposer,
74 final TrackingFileManager trackingFileManager,
75 final LocalPathPrefixComposerFactory localPathPrefixComposerFactory,
76 final RepositoryKeyFunctionFactory repositoryKeyFunctionFactory) {
77 this.localPathComposer = requireNonNull(localPathComposer);
78 this.trackingFileManager = requireNonNull(trackingFileManager);
79 this.localPathPrefixComposerFactory = requireNonNull(localPathPrefixComposerFactory);
80 this.repositoryKeyFunctionFactory = requireNonNull(repositoryKeyFunctionFactory);
81 }
82
83 @Override
84 public LocalRepositoryManager newInstance(RepositorySystemSession session, LocalRepository repository)
85 throws NoLocalRepositoryManagerException {
86 requireNonNull(session, "session cannot be null");
87 requireNonNull(repository, "repository cannot be null");
88
89 String trackingFilename = ConfigUtils.getString(session, "", CONFIG_PROP_TRACKING_FILENAME);
90 if (trackingFilename.isEmpty()
91 || trackingFilename.contains("/")
92 || trackingFilename.contains("\\")
93 || trackingFilename.contains("..")) {
94 trackingFilename = DEFAULT_TRACKING_FILENAME;
95 }
96
97 if ("".equals(repository.getContentType()) || "default".equals(repository.getContentType())) {
98 return new EnhancedLocalRepositoryManager(
99 repository.getBasePath(),
100 localPathComposer,
101 repositoryKeyFunctionFactory.systemRepositoryKeyFunction(session),
102 trackingFilename,
103 trackingFileManager,
104 localPathPrefixComposerFactory.createComposer(session));
105 } else {
106 throw new NoLocalRepositoryManagerException(repository);
107 }
108 }
109
110 @Override
111 public float getPriority() {
112 return priority;
113 }
114
115
116
117
118
119
120
121 public EnhancedLocalRepositoryManagerFactory setPriority(float priority) {
122 this.priority = priority;
123 return this;
124 }
125 }