1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.aether.impl.guice;
20
21 import javax.inject.Named;
22 import javax.inject.Singleton;
23
24 import java.util.Collections;
25 import java.util.HashMap;
26 import java.util.HashSet;
27 import java.util.Map;
28 import java.util.Set;
29
30 import com.google.inject.AbstractModule;
31 import com.google.inject.Provides;
32 import com.google.inject.name.Names;
33 import org.eclipse.aether.RepositoryListener;
34 import org.eclipse.aether.RepositorySystem;
35 import org.eclipse.aether.impl.ArtifactResolver;
36 import org.eclipse.aether.impl.DependencyCollector;
37 import org.eclipse.aether.impl.Deployer;
38 import org.eclipse.aether.impl.Installer;
39 import org.eclipse.aether.impl.LocalRepositoryProvider;
40 import org.eclipse.aether.impl.MetadataResolver;
41 import org.eclipse.aether.impl.OfflineController;
42 import org.eclipse.aether.impl.RemoteRepositoryFilterManager;
43 import org.eclipse.aether.impl.RemoteRepositoryManager;
44 import org.eclipse.aether.impl.RepositoryConnectorProvider;
45 import org.eclipse.aether.impl.RepositoryEventDispatcher;
46 import org.eclipse.aether.impl.RepositorySystemLifecycle;
47 import org.eclipse.aether.impl.UpdateCheckManager;
48 import org.eclipse.aether.impl.UpdatePolicyAnalyzer;
49 import org.eclipse.aether.internal.impl.DefaultArtifactResolver;
50 import org.eclipse.aether.internal.impl.DefaultChecksumPolicyProvider;
51 import org.eclipse.aether.internal.impl.DefaultDeployer;
52 import org.eclipse.aether.internal.impl.DefaultFileProcessor;
53 import org.eclipse.aether.internal.impl.DefaultInstaller;
54 import org.eclipse.aether.internal.impl.DefaultLocalPathComposer;
55 import org.eclipse.aether.internal.impl.DefaultLocalPathPrefixComposerFactory;
56 import org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider;
57 import org.eclipse.aether.internal.impl.DefaultMetadataResolver;
58 import org.eclipse.aether.internal.impl.DefaultOfflineController;
59 import org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager;
60 import org.eclipse.aether.internal.impl.DefaultRepositoryConnectorProvider;
61 import org.eclipse.aether.internal.impl.DefaultRepositoryEventDispatcher;
62 import org.eclipse.aether.internal.impl.DefaultRepositoryLayoutProvider;
63 import org.eclipse.aether.internal.impl.DefaultRepositorySystem;
64 import org.eclipse.aether.internal.impl.DefaultRepositorySystemLifecycle;
65 import org.eclipse.aether.internal.impl.DefaultTrackingFileManager;
66 import org.eclipse.aether.internal.impl.DefaultTransporterProvider;
67 import org.eclipse.aether.internal.impl.DefaultUpdateCheckManager;
68 import org.eclipse.aether.internal.impl.DefaultUpdatePolicyAnalyzer;
69 import org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManagerFactory;
70 import org.eclipse.aether.internal.impl.LocalPathComposer;
71 import org.eclipse.aether.internal.impl.LocalPathPrefixComposerFactory;
72 import org.eclipse.aether.internal.impl.Maven2RepositoryLayoutFactory;
73 import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
74 import org.eclipse.aether.internal.impl.TrackingFileManager;
75 import org.eclipse.aether.internal.impl.checksum.DefaultChecksumAlgorithmFactorySelector;
76 import org.eclipse.aether.internal.impl.checksum.Md5ChecksumAlgorithmFactory;
77 import org.eclipse.aether.internal.impl.checksum.Sha1ChecksumAlgorithmFactory;
78 import org.eclipse.aether.internal.impl.checksum.Sha256ChecksumAlgorithmFactory;
79 import org.eclipse.aether.internal.impl.checksum.Sha512ChecksumAlgorithmFactory;
80 import org.eclipse.aether.internal.impl.checksum.SparseDirectoryTrustedChecksumsSource;
81 import org.eclipse.aether.internal.impl.checksum.SummaryFileTrustedChecksumsSource;
82 import org.eclipse.aether.internal.impl.checksum.TrustedToProvidedChecksumsSourceAdapter;
83 import org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector;
84 import org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate;
85 import org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector;
86 import org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector;
87 import org.eclipse.aether.internal.impl.filter.DefaultRemoteRepositoryFilterManager;
88 import org.eclipse.aether.internal.impl.filter.GroupIdRemoteRepositoryFilterSource;
89 import org.eclipse.aether.internal.impl.filter.PrefixesRemoteRepositoryFilterSource;
90 import org.eclipse.aether.internal.impl.resolution.TrustedChecksumsArtifactResolverPostProcessor;
91 import org.eclipse.aether.internal.impl.slf4j.Slf4jLoggerFactory;
92 import org.eclipse.aether.internal.impl.synccontext.DefaultSyncContextFactory;
93 import org.eclipse.aether.internal.impl.synccontext.named.NameMapper;
94 import org.eclipse.aether.internal.impl.synccontext.named.NameMappers;
95 import org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapterFactory;
96 import org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapterFactoryImpl;
97 import org.eclipse.aether.internal.impl.synccontext.named.providers.DiscriminatingNameMapperProvider;
98 import org.eclipse.aether.internal.impl.synccontext.named.providers.FileGAVNameMapperProvider;
99 import org.eclipse.aether.internal.impl.synccontext.named.providers.FileHashingGAVNameMapperProvider;
100 import org.eclipse.aether.internal.impl.synccontext.named.providers.GAVNameMapperProvider;
101 import org.eclipse.aether.internal.impl.synccontext.named.providers.StaticNameMapperProvider;
102 import org.eclipse.aether.named.NamedLockFactory;
103 import org.eclipse.aether.named.providers.FileLockNamedLockFactory;
104 import org.eclipse.aether.named.providers.LocalReadWriteLockNamedLockFactory;
105 import org.eclipse.aether.named.providers.LocalSemaphoreNamedLockFactory;
106 import org.eclipse.aether.named.providers.NoopNamedLockFactory;
107 import org.eclipse.aether.spi.checksums.ProvidedChecksumsSource;
108 import org.eclipse.aether.spi.checksums.TrustedChecksumsSource;
109 import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactory;
110 import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactorySelector;
111 import org.eclipse.aether.spi.connector.checksum.ChecksumPolicyProvider;
112 import org.eclipse.aether.spi.connector.filter.RemoteRepositoryFilterSource;
113 import org.eclipse.aether.spi.connector.layout.RepositoryLayoutFactory;
114 import org.eclipse.aether.spi.connector.layout.RepositoryLayoutProvider;
115 import org.eclipse.aether.spi.connector.transport.TransporterProvider;
116 import org.eclipse.aether.spi.io.FileProcessor;
117 import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
118 import org.eclipse.aether.spi.log.LoggerFactory;
119 import org.eclipse.aether.spi.resolution.ArtifactResolverPostProcessor;
120 import org.eclipse.aether.spi.synccontext.SyncContextFactory;
121 import org.slf4j.ILoggerFactory;
122
123
124
125
126
127
128
129
130
131
132 public class AetherModule extends AbstractModule {
133
134
135
136
137
138 public AetherModule() {}
139
140
141
142
143
144 @Override
145 protected void configure() {
146 bind(RepositorySystem.class)
147 .to(DefaultRepositorySystem.class)
148 .in(Singleton.class);
149 bind(ArtifactResolver.class)
150 .to(DefaultArtifactResolver.class)
151 .in(Singleton.class);
152
153 bind(DependencyCollector.class)
154 .to(DefaultDependencyCollector.class)
155 .in(Singleton.class);
156 bind(DependencyCollectorDelegate.class)
157 .annotatedWith(Names.named(BfDependencyCollector.NAME))
158 .to(BfDependencyCollector.class)
159 .in(Singleton.class);
160 bind(DependencyCollectorDelegate.class)
161 .annotatedWith(Names.named(DfDependencyCollector.NAME))
162 .to(DfDependencyCollector.class)
163 .in(Singleton.class);
164
165 bind(Deployer.class)
166 .to(DefaultDeployer.class)
167 .in(Singleton.class);
168 bind(Installer.class)
169 .to(DefaultInstaller.class)
170 .in(Singleton.class);
171 bind(MetadataResolver.class)
172 .to(DefaultMetadataResolver.class)
173 .in(Singleton.class);
174 bind(RepositoryLayoutProvider.class)
175 .to(DefaultRepositoryLayoutProvider.class)
176 .in(Singleton.class);
177 bind(RepositoryLayoutFactory.class)
178 .annotatedWith(Names.named("maven2"))
179 .to(Maven2RepositoryLayoutFactory.class)
180 .in(Singleton.class);
181 bind(TransporterProvider.class)
182 .to(DefaultTransporterProvider.class)
183 .in(Singleton.class);
184 bind(ChecksumPolicyProvider.class)
185 .to(DefaultChecksumPolicyProvider.class)
186 .in(Singleton.class);
187 bind(RepositoryConnectorProvider.class)
188 .to(DefaultRepositoryConnectorProvider.class)
189 .in(Singleton.class);
190 bind(RemoteRepositoryManager.class)
191 .to(DefaultRemoteRepositoryManager.class)
192 .in(Singleton.class);
193 bind(UpdateCheckManager.class)
194 .to(DefaultUpdateCheckManager.class)
195 .in(Singleton.class);
196 bind(UpdatePolicyAnalyzer.class)
197 .to(DefaultUpdatePolicyAnalyzer.class)
198 .in(Singleton.class);
199 bind(FileProcessor.class)
200 .to(DefaultFileProcessor.class)
201 .in(Singleton.class);
202 bind(RepositoryEventDispatcher.class)
203 .to(DefaultRepositoryEventDispatcher.class)
204 .in(Singleton.class);
205 bind(OfflineController.class)
206 .to(DefaultOfflineController.class)
207 .in(Singleton.class);
208
209 bind(LocalPathComposer.class).to(DefaultLocalPathComposer.class).in(Singleton.class);
210 bind(LocalPathPrefixComposerFactory.class)
211 .to(DefaultLocalPathPrefixComposerFactory.class)
212 .in(Singleton.class);
213
214 bind(LocalRepositoryProvider.class)
215 .to(DefaultLocalRepositoryProvider.class)
216 .in(Singleton.class);
217 bind(LocalRepositoryManagerFactory.class)
218 .annotatedWith(Names.named("simple"))
219 .to(SimpleLocalRepositoryManagerFactory.class)
220 .in(Singleton.class);
221 bind(LocalRepositoryManagerFactory.class)
222 .annotatedWith(Names.named("enhanced"))
223 .to(EnhancedLocalRepositoryManagerFactory.class)
224 .in(Singleton.class);
225 bind(TrackingFileManager.class).to(DefaultTrackingFileManager.class).in(Singleton.class);
226
227 bind(ProvidedChecksumsSource.class)
228 .annotatedWith(Names.named(TrustedToProvidedChecksumsSourceAdapter.NAME))
229 .to(TrustedToProvidedChecksumsSourceAdapter.class)
230 .in(Singleton.class);
231
232 bind(TrustedChecksumsSource.class)
233 .annotatedWith(Names.named(SparseDirectoryTrustedChecksumsSource.NAME))
234 .to(SparseDirectoryTrustedChecksumsSource.class)
235 .in(Singleton.class);
236 bind(TrustedChecksumsSource.class)
237 .annotatedWith(Names.named(SummaryFileTrustedChecksumsSource.NAME))
238 .to(SummaryFileTrustedChecksumsSource.class)
239 .in(Singleton.class);
240
241 bind(ArtifactResolverPostProcessor.class)
242 .annotatedWith(Names.named(TrustedChecksumsArtifactResolverPostProcessor.NAME))
243 .to(TrustedChecksumsArtifactResolverPostProcessor.class)
244 .in(Singleton.class);
245
246 bind(ChecksumAlgorithmFactory.class)
247 .annotatedWith(Names.named(Md5ChecksumAlgorithmFactory.NAME))
248 .to(Md5ChecksumAlgorithmFactory.class);
249 bind(ChecksumAlgorithmFactory.class)
250 .annotatedWith(Names.named(Sha1ChecksumAlgorithmFactory.NAME))
251 .to(Sha1ChecksumAlgorithmFactory.class);
252 bind(ChecksumAlgorithmFactory.class)
253 .annotatedWith(Names.named(Sha256ChecksumAlgorithmFactory.NAME))
254 .to(Sha256ChecksumAlgorithmFactory.class);
255 bind(ChecksumAlgorithmFactory.class)
256 .annotatedWith(Names.named(Sha512ChecksumAlgorithmFactory.NAME))
257 .to(Sha512ChecksumAlgorithmFactory.class);
258 bind(ChecksumAlgorithmFactorySelector.class)
259 .to(DefaultChecksumAlgorithmFactorySelector.class)
260 .in(Singleton.class);
261
262 bind(RepositorySystemLifecycle.class)
263 .to(DefaultRepositorySystemLifecycle.class)
264 .in(Singleton.class);
265
266 bind(NamedLockFactoryAdapterFactory.class)
267 .to(NamedLockFactoryAdapterFactoryImpl.class)
268 .in(Singleton.class);
269 bind(SyncContextFactory.class).to(DefaultSyncContextFactory.class).in(Singleton.class);
270 bind(org.eclipse.aether.impl.SyncContextFactory.class)
271 .to(org.eclipse.aether.internal.impl.synccontext.legacy.DefaultSyncContextFactory.class)
272 .in(Singleton.class);
273
274 bind(NameMapper.class)
275 .annotatedWith(Names.named(NameMappers.STATIC_NAME))
276 .toProvider(StaticNameMapperProvider.class)
277 .in(Singleton.class);
278 bind(NameMapper.class)
279 .annotatedWith(Names.named(NameMappers.GAV_NAME))
280 .toProvider(GAVNameMapperProvider.class)
281 .in(Singleton.class);
282 bind(NameMapper.class)
283 .annotatedWith(Names.named(NameMappers.DISCRIMINATING_NAME))
284 .toProvider(DiscriminatingNameMapperProvider.class)
285 .in(Singleton.class);
286 bind(NameMapper.class)
287 .annotatedWith(Names.named(NameMappers.FILE_GAV_NAME))
288 .toProvider(FileGAVNameMapperProvider.class)
289 .in(Singleton.class);
290 bind(NameMapper.class)
291 .annotatedWith(Names.named(NameMappers.FILE_HGAV_NAME))
292 .toProvider(FileHashingGAVNameMapperProvider.class)
293 .in(Singleton.class);
294
295 bind(NamedLockFactory.class)
296 .annotatedWith(Names.named(NoopNamedLockFactory.NAME))
297 .to(NoopNamedLockFactory.class)
298 .in(Singleton.class);
299 bind(NamedLockFactory.class)
300 .annotatedWith(Names.named(LocalReadWriteLockNamedLockFactory.NAME))
301 .to(LocalReadWriteLockNamedLockFactory.class)
302 .in(Singleton.class);
303 bind(NamedLockFactory.class)
304 .annotatedWith(Names.named(LocalSemaphoreNamedLockFactory.NAME))
305 .to(LocalSemaphoreNamedLockFactory.class)
306 .in(Singleton.class);
307 bind(NamedLockFactory.class)
308 .annotatedWith(Names.named(FileLockNamedLockFactory.NAME))
309 .to(FileLockNamedLockFactory.class)
310 .in(Singleton.class);
311
312 bind(RemoteRepositoryFilterManager.class)
313 .to(DefaultRemoteRepositoryFilterManager.class)
314 .in(Singleton.class);
315 bind(RemoteRepositoryFilterSource.class)
316 .annotatedWith(Names.named(GroupIdRemoteRepositoryFilterSource.NAME))
317 .to(GroupIdRemoteRepositoryFilterSource.class)
318 .in(Singleton.class);
319 bind(RemoteRepositoryFilterSource.class)
320 .annotatedWith(Names.named(PrefixesRemoteRepositoryFilterSource.NAME))
321 .to(PrefixesRemoteRepositoryFilterSource.class)
322 .in(Singleton.class);
323
324 install(new Slf4jModule());
325 }
326
327 @Provides
328 @Singleton
329 Map<String, RemoteRepositoryFilterSource> remoteRepositoryFilterSources(
330 @Named(GroupIdRemoteRepositoryFilterSource.NAME) RemoteRepositoryFilterSource groupId,
331 @Named(PrefixesRemoteRepositoryFilterSource.NAME) RemoteRepositoryFilterSource prefixes) {
332 Map<String, RemoteRepositoryFilterSource> result = new HashMap<>();
333 result.put(GroupIdRemoteRepositoryFilterSource.NAME, groupId);
334 result.put(PrefixesRemoteRepositoryFilterSource.NAME, prefixes);
335 return Collections.unmodifiableMap(result);
336 }
337
338 @Provides
339 @Singleton
340 Map<String, ArtifactResolverPostProcessor> artifactResolverProcessors(
341 @Named(TrustedChecksumsArtifactResolverPostProcessor.NAME) ArtifactResolverPostProcessor trustedChecksums) {
342 Map<String, ArtifactResolverPostProcessor> result = new HashMap<>();
343 result.put(TrustedChecksumsArtifactResolverPostProcessor.NAME, trustedChecksums);
344 return Collections.unmodifiableMap(result);
345 }
346
347 @Provides
348 @Singleton
349 Map<String, DependencyCollectorDelegate> dependencyCollectorDelegates(
350 @Named(BfDependencyCollector.NAME) DependencyCollectorDelegate bf,
351 @Named(DfDependencyCollector.NAME) DependencyCollectorDelegate df) {
352 Map<String, DependencyCollectorDelegate> result = new HashMap<>();
353 result.put(BfDependencyCollector.NAME, bf);
354 result.put(DfDependencyCollector.NAME, df);
355 return Collections.unmodifiableMap(result);
356 }
357
358 @Provides
359 @Singleton
360 Map<String, ProvidedChecksumsSource> providedChecksumSources(
361 @Named(TrustedToProvidedChecksumsSourceAdapter.NAME) ProvidedChecksumsSource adapter) {
362 Map<String, ProvidedChecksumsSource> result = new HashMap<>();
363 result.put(TrustedToProvidedChecksumsSourceAdapter.NAME, adapter);
364 return Collections.unmodifiableMap(result);
365 }
366
367 @Provides
368 @Singleton
369 Map<String, TrustedChecksumsSource> trustedChecksumSources(
370 @Named(SparseDirectoryTrustedChecksumsSource.NAME) TrustedChecksumsSource sparse,
371 @Named(SummaryFileTrustedChecksumsSource.NAME) TrustedChecksumsSource compact) {
372 Map<String, TrustedChecksumsSource> result = new HashMap<>();
373 result.put(SparseDirectoryTrustedChecksumsSource.NAME, sparse);
374 result.put(SummaryFileTrustedChecksumsSource.NAME, compact);
375 return Collections.unmodifiableMap(result);
376 }
377
378 @Provides
379 @Singleton
380 Map<String, ChecksumAlgorithmFactory> provideChecksumTypes(
381 @Named(Sha512ChecksumAlgorithmFactory.NAME) ChecksumAlgorithmFactory sha512,
382 @Named(Sha256ChecksumAlgorithmFactory.NAME) ChecksumAlgorithmFactory sha256,
383 @Named(Sha1ChecksumAlgorithmFactory.NAME) ChecksumAlgorithmFactory sha1,
384 @Named(Md5ChecksumAlgorithmFactory.NAME) ChecksumAlgorithmFactory md5) {
385 Map<String, ChecksumAlgorithmFactory> result = new HashMap<>();
386 result.put(Sha512ChecksumAlgorithmFactory.NAME, sha512);
387 result.put(Sha256ChecksumAlgorithmFactory.NAME, sha256);
388 result.put(Sha1ChecksumAlgorithmFactory.NAME, sha1);
389 result.put(Md5ChecksumAlgorithmFactory.NAME, md5);
390 return Collections.unmodifiableMap(result);
391 }
392
393 @Provides
394 @Singleton
395 Map<String, NameMapper> provideNameMappers(
396 @Named(NameMappers.STATIC_NAME) NameMapper staticNameMapper,
397 @Named(NameMappers.GAV_NAME) NameMapper gavNameMapper,
398 @Named(NameMappers.DISCRIMINATING_NAME) NameMapper discriminatingNameMapper,
399 @Named(NameMappers.FILE_GAV_NAME) NameMapper fileGavNameMapper,
400 @Named(NameMappers.FILE_HGAV_NAME) NameMapper fileHashingGavNameMapper) {
401 Map<String, NameMapper> result = new HashMap<>();
402 result.put(NameMappers.STATIC_NAME, staticNameMapper);
403 result.put(NameMappers.GAV_NAME, gavNameMapper);
404 result.put(NameMappers.DISCRIMINATING_NAME, discriminatingNameMapper);
405 result.put(NameMappers.FILE_GAV_NAME, fileGavNameMapper);
406 result.put(NameMappers.FILE_HGAV_NAME, fileHashingGavNameMapper);
407 return Collections.unmodifiableMap(result);
408 }
409
410 @Provides
411 @Singleton
412 Map<String, NamedLockFactory> provideNamedLockFactories(
413 @Named(LocalReadWriteLockNamedLockFactory.NAME) NamedLockFactory localRwLock,
414 @Named(LocalSemaphoreNamedLockFactory.NAME) NamedLockFactory localSemaphore,
415 @Named(FileLockNamedLockFactory.NAME) NamedLockFactory fileLockFactory) {
416 Map<String, NamedLockFactory> result = new HashMap<>();
417 result.put(LocalReadWriteLockNamedLockFactory.NAME, localRwLock);
418 result.put(LocalSemaphoreNamedLockFactory.NAME, localSemaphore);
419 result.put(FileLockNamedLockFactory.NAME, fileLockFactory);
420 return Collections.unmodifiableMap(result);
421 }
422
423 @Provides
424 @Singleton
425 Set<LocalRepositoryManagerFactory> provideLocalRepositoryManagerFactories(
426 @Named("simple") LocalRepositoryManagerFactory simple,
427 @Named("enhanced") LocalRepositoryManagerFactory enhanced) {
428 Set<LocalRepositoryManagerFactory> result = new HashSet<>();
429 result.add(simple);
430 result.add(enhanced);
431 return Collections.unmodifiableSet(result);
432 }
433
434 @Provides
435 @Singleton
436 Set<RepositoryLayoutFactory> provideRepositoryLayoutFactories(@Named("maven2") RepositoryLayoutFactory maven2) {
437 Set<RepositoryLayoutFactory> result = new HashSet<>();
438 result.add(maven2);
439 return Collections.unmodifiableSet(result);
440 }
441
442 @Provides
443 @Singleton
444 Set<RepositoryListener> providesRepositoryListeners() {
445 return Collections.emptySet();
446 }
447
448 private static class Slf4jModule extends AbstractModule {
449
450 @Override
451 protected void configure() {
452 bind(LoggerFactory.class)
453 .to(Slf4jLoggerFactory.class);
454 }
455
456 @Provides
457 @Singleton
458 ILoggerFactory getLoggerFactory() {
459 return org.slf4j.LoggerFactory.getILoggerFactory();
460 }
461 }
462 }