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 @Deprecated
59 public EnhancedLocalRepositoryManagerFactory() {
60
61 }
62
63 @Inject
64 public EnhancedLocalRepositoryManagerFactory(
65 final LocalPathComposer localPathComposer,
66 final TrackingFileManager trackingFileManager,
67 final LocalPathPrefixComposerFactory localPathPrefixComposerFactory) {
68 this.localPathComposer = requireNonNull(localPathComposer);
69 this.trackingFileManager = requireNonNull(trackingFileManager);
70 this.localPathPrefixComposerFactory = requireNonNull(localPathPrefixComposerFactory);
71 }
72
73 @Override
74 public void initService(final ServiceLocator locator) {
75 this.localPathComposer = requireNonNull(locator.getService(LocalPathComposer.class));
76 this.trackingFileManager = requireNonNull(locator.getService(TrackingFileManager.class));
77 this.localPathPrefixComposerFactory = new DefaultLocalPathPrefixComposerFactory();
78 }
79
80 @Override
81 public LocalRepositoryManager newInstance(RepositorySystemSession session, LocalRepository repository)
82 throws NoLocalRepositoryManagerException {
83 requireNonNull(session, "session cannot be null");
84 requireNonNull(repository, "repository cannot be null");
85
86 String trackingFilename = ConfigUtils.getString(session, "", CONFIG_PROP_TRACKING_FILENAME);
87 if (trackingFilename.isEmpty()
88 || trackingFilename.contains("/")
89 || trackingFilename.contains("\\")
90 || trackingFilename.contains("..")) {
91 trackingFilename = DEFAULT_TRACKING_FILENAME;
92 }
93
94 if ("".equals(repository.getContentType()) || "default".equals(repository.getContentType())) {
95 return new EnhancedLocalRepositoryManager(
96 repository.getBasedir(),
97 localPathComposer,
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 }