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.RepositorySystemSession;
26 import org.eclipse.aether.repository.LocalRepository;
27 import org.eclipse.aether.repository.LocalRepositoryManager;
28 import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
29 import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
30 import org.eclipse.aether.spi.locator.Service;
31 import org.eclipse.aether.spi.locator.ServiceLocator;
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("enhanced")
45 public class EnhancedLocalRepositoryManagerFactory implements LocalRepositoryManagerFactory, Service {
46 private static final String CONFIG_PROP_TRACKING_FILENAME = "aether.enhancedLocalRepository.trackingFilename";
47
48 private static final String DEFAULT_TRACKING_FILENAME = "_remote.repositories";
49
50 private float priority = 10.0f;
51
52 private LocalPathComposer localPathComposer;
53
54 private TrackingFileManager trackingFileManager;
55
56 private LocalPathPrefixComposerFactory localPathPrefixComposerFactory;
57
58 public EnhancedLocalRepositoryManagerFactory() {
59
60 }
61
62 @Inject
63 public EnhancedLocalRepositoryManagerFactory(
64 final LocalPathComposer localPathComposer,
65 final TrackingFileManager trackingFileManager,
66 final LocalPathPrefixComposerFactory localPathPrefixComposerFactory) {
67 this.localPathComposer = requireNonNull(localPathComposer);
68 this.trackingFileManager = requireNonNull(trackingFileManager);
69 this.localPathPrefixComposerFactory = requireNonNull(localPathPrefixComposerFactory);
70 }
71
72 @Override
73 public void initService(final ServiceLocator locator) {
74 this.localPathComposer = requireNonNull(locator.getService(LocalPathComposer.class));
75 this.trackingFileManager = requireNonNull(locator.getService(TrackingFileManager.class));
76 this.localPathPrefixComposerFactory = new DefaultLocalPathPrefixComposerFactory();
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.getBasedir(),
96 localPathComposer,
97 trackingFilename,
98 trackingFileManager,
99 localPathPrefixComposerFactory.createComposer(session));
100 } else {
101 throw new NoLocalRepositoryManagerException(repository);
102 }
103 }
104
105 @Override
106 public float getPriority() {
107 return priority;
108 }
109
110
111
112
113
114
115
116 public EnhancedLocalRepositoryManagerFactory setPriority(float priority) {
117 this.priority = priority;
118 return this;
119 }
120 }