View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.impl.standalone;
20  
21  import java.util.List;
22  import java.util.Map;
23  
24  import org.apache.maven.api.annotations.Nullable;
25  import org.apache.maven.api.di.Named;
26  import org.apache.maven.api.di.Provides;
27  import org.apache.maven.impl.resolver.validator.MavenValidatorFactory;
28  import org.eclipse.aether.RepositoryListener;
29  import org.eclipse.aether.RepositorySystem;
30  import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
31  import org.eclipse.aether.impl.ArtifactDescriptorReader;
32  import org.eclipse.aether.impl.ArtifactResolver;
33  import org.eclipse.aether.impl.DependencyCollector;
34  import org.eclipse.aether.impl.Deployer;
35  import org.eclipse.aether.impl.Installer;
36  import org.eclipse.aether.impl.LocalRepositoryProvider;
37  import org.eclipse.aether.impl.MetadataGeneratorFactory;
38  import org.eclipse.aether.impl.MetadataResolver;
39  import org.eclipse.aether.impl.OfflineController;
40  import org.eclipse.aether.impl.RemoteRepositoryFilterManager;
41  import org.eclipse.aether.impl.RemoteRepositoryManager;
42  import org.eclipse.aether.impl.RepositoryConnectorProvider;
43  import org.eclipse.aether.impl.RepositoryEventDispatcher;
44  import org.eclipse.aether.impl.RepositorySystemLifecycle;
45  import org.eclipse.aether.impl.RepositorySystemValidator;
46  import org.eclipse.aether.impl.UpdateCheckManager;
47  import org.eclipse.aether.impl.UpdatePolicyAnalyzer;
48  import org.eclipse.aether.impl.VersionRangeResolver;
49  import org.eclipse.aether.impl.VersionResolver;
50  import org.eclipse.aether.internal.impl.DefaultArtifactPredicateFactory;
51  import org.eclipse.aether.internal.impl.DefaultArtifactResolver;
52  import org.eclipse.aether.internal.impl.DefaultChecksumPolicyProvider;
53  import org.eclipse.aether.internal.impl.DefaultChecksumProcessor;
54  import org.eclipse.aether.internal.impl.DefaultDeployer;
55  import org.eclipse.aether.internal.impl.DefaultInstaller;
56  import org.eclipse.aether.internal.impl.DefaultLocalPathComposer;
57  import org.eclipse.aether.internal.impl.DefaultLocalPathPrefixComposerFactory;
58  import org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider;
59  import org.eclipse.aether.internal.impl.DefaultMetadataResolver;
60  import org.eclipse.aether.internal.impl.DefaultOfflineController;
61  import org.eclipse.aether.internal.impl.DefaultPathProcessor;
62  import org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager;
63  import org.eclipse.aether.internal.impl.DefaultRepositoryConnectorProvider;
64  import org.eclipse.aether.internal.impl.DefaultRepositoryEventDispatcher;
65  import org.eclipse.aether.internal.impl.DefaultRepositoryLayoutProvider;
66  import org.eclipse.aether.internal.impl.DefaultRepositorySystem;
67  import org.eclipse.aether.internal.impl.DefaultRepositorySystemLifecycle;
68  import org.eclipse.aether.internal.impl.DefaultRepositorySystemValidator;
69  import org.eclipse.aether.internal.impl.DefaultTrackingFileManager;
70  import org.eclipse.aether.internal.impl.DefaultTransporterProvider;
71  import org.eclipse.aether.internal.impl.DefaultUpdateCheckManager;
72  import org.eclipse.aether.internal.impl.DefaultUpdatePolicyAnalyzer;
73  import org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManagerFactory;
74  import org.eclipse.aether.internal.impl.LocalPathComposer;
75  import org.eclipse.aether.internal.impl.LocalPathPrefixComposerFactory;
76  import org.eclipse.aether.internal.impl.Maven2RepositoryLayoutFactory;
77  import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
78  import org.eclipse.aether.internal.impl.TrackingFileManager;
79  import org.eclipse.aether.internal.impl.checksum.DefaultChecksumAlgorithmFactorySelector;
80  import org.eclipse.aether.internal.impl.checksum.Md5ChecksumAlgorithmFactory;
81  import org.eclipse.aether.internal.impl.checksum.Sha1ChecksumAlgorithmFactory;
82  import org.eclipse.aether.internal.impl.checksum.Sha256ChecksumAlgorithmFactory;
83  import org.eclipse.aether.internal.impl.checksum.Sha512ChecksumAlgorithmFactory;
84  import org.eclipse.aether.internal.impl.checksum.SparseDirectoryTrustedChecksumsSource;
85  import org.eclipse.aether.internal.impl.checksum.SummaryFileTrustedChecksumsSource;
86  import org.eclipse.aether.internal.impl.checksum.TrustedToProvidedChecksumsSourceAdapter;
87  import org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector;
88  import org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate;
89  import org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector;
90  import org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector;
91  import org.eclipse.aether.internal.impl.filter.DefaultRemoteRepositoryFilterManager;
92  import org.eclipse.aether.internal.impl.filter.FilteringPipelineRepositoryConnectorFactory;
93  import org.eclipse.aether.internal.impl.filter.GroupIdRemoteRepositoryFilterSource;
94  import org.eclipse.aether.internal.impl.filter.PrefixesRemoteRepositoryFilterSource;
95  import org.eclipse.aether.internal.impl.offline.OfflinePipelineRepositoryConnectorFactory;
96  import org.eclipse.aether.internal.impl.synccontext.DefaultSyncContextFactory;
97  import org.eclipse.aether.internal.impl.synccontext.named.NameMapper;
98  import org.eclipse.aether.internal.impl.synccontext.named.NameMappers;
99  import org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapterFactory;
100 import org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapterFactoryImpl;
101 import org.eclipse.aether.internal.impl.transport.http.DefaultChecksumExtractor;
102 import org.eclipse.aether.internal.impl.transport.http.Nx2ChecksumExtractor;
103 import org.eclipse.aether.internal.impl.transport.http.XChecksumExtractor;
104 import org.eclipse.aether.named.NamedLockFactory;
105 import org.eclipse.aether.named.providers.FileLockNamedLockFactory;
106 import org.eclipse.aether.named.providers.LocalReadWriteLockNamedLockFactory;
107 import org.eclipse.aether.named.providers.LocalSemaphoreNamedLockFactory;
108 import org.eclipse.aether.named.providers.NoopNamedLockFactory;
109 import org.eclipse.aether.spi.artifact.ArtifactPredicateFactory;
110 import org.eclipse.aether.spi.artifact.decorator.ArtifactDecoratorFactory;
111 import org.eclipse.aether.spi.artifact.generator.ArtifactGeneratorFactory;
112 import org.eclipse.aether.spi.checksums.ProvidedChecksumsSource;
113 import org.eclipse.aether.spi.checksums.TrustedChecksumsSource;
114 import org.eclipse.aether.spi.connector.PipelineRepositoryConnectorFactory;
115 import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
116 import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactory;
117 import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactorySelector;
118 import org.eclipse.aether.spi.connector.checksum.ChecksumPolicyProvider;
119 import org.eclipse.aether.spi.connector.filter.RemoteRepositoryFilterSource;
120 import org.eclipse.aether.spi.connector.layout.RepositoryLayoutFactory;
121 import org.eclipse.aether.spi.connector.layout.RepositoryLayoutProvider;
122 import org.eclipse.aether.spi.connector.transport.TransporterFactory;
123 import org.eclipse.aether.spi.connector.transport.TransporterProvider;
124 import org.eclipse.aether.spi.connector.transport.http.ChecksumExtractor;
125 import org.eclipse.aether.spi.connector.transport.http.ChecksumExtractorStrategy;
126 import org.eclipse.aether.spi.io.ChecksumProcessor;
127 import org.eclipse.aether.spi.io.PathProcessor;
128 import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
129 import org.eclipse.aether.spi.resolution.ArtifactResolverPostProcessor;
130 import org.eclipse.aether.spi.synccontext.SyncContextFactory;
131 import org.eclipse.aether.spi.validator.ValidatorFactory;
132 
133 /**
134  * DI Bridge for Maven Resolver
135  *
136  * TODO: reuse mvn4 Supplier here
137  */
138 @SuppressWarnings({"unused", "checkstyle:ParameterNumber"})
139 public class RepositorySystemSupplier {
140 
141     @Provides
142     static MetadataResolver newMetadataResolver(
143             RepositoryEventDispatcher repositoryEventDispatcher,
144             UpdateCheckManager updateCheckManager,
145             RepositoryConnectorProvider repositoryConnectorProvider,
146             RemoteRepositoryManager remoteRepositoryManager,
147             SyncContextFactory syncContextFactory,
148             OfflineController offlineController,
149             RemoteRepositoryFilterManager remoteRepositoryFilterManager,
150             PathProcessor pathProcessor) {
151         return new DefaultMetadataResolver(
152                 repositoryEventDispatcher,
153                 updateCheckManager,
154                 repositoryConnectorProvider,
155                 remoteRepositoryManager,
156                 syncContextFactory,
157                 offlineController,
158                 remoteRepositoryFilterManager,
159                 pathProcessor);
160     }
161 
162     @Provides
163     static RepositoryEventDispatcher newRepositoryEventDispatcher(@Nullable Map<String, RepositoryListener> listeners) {
164         return new DefaultRepositoryEventDispatcher(listeners != null ? listeners : Map.of());
165     }
166 
167     @Provides
168     static UpdateCheckManager newUpdateCheckManager(
169             TrackingFileManager trackingFileManager,
170             UpdatePolicyAnalyzer updatePolicyAnalyzer,
171             PathProcessor pathProcessor) {
172         return new DefaultUpdateCheckManager(trackingFileManager, updatePolicyAnalyzer, pathProcessor);
173     }
174 
175     @Provides
176     static TrackingFileManager newTrackingFileManager() {
177         return new DefaultTrackingFileManager();
178     }
179 
180     @Provides
181     static UpdatePolicyAnalyzer newUpdatePolicyAnalyzer() {
182         return new DefaultUpdatePolicyAnalyzer();
183     }
184 
185     @Provides
186     static RepositoryConnectorProvider newRepositoryConnectorProvider(
187             Map<String, RepositoryConnectorFactory> connectorFactories,
188             Map<String, PipelineRepositoryConnectorFactory> pipelineConnectorFactories) {
189         return new DefaultRepositoryConnectorProvider(connectorFactories, pipelineConnectorFactories);
190     }
191 
192     @Named("basic")
193     @Provides
194     static BasicRepositoryConnectorFactory newBasicRepositoryConnectorFactory(
195             TransporterProvider transporterProvider,
196             RepositoryLayoutProvider layoutProvider,
197             ChecksumPolicyProvider checksumPolicyProvider,
198             ChecksumProcessor checksumProcessor,
199             Map<String, ProvidedChecksumsSource> providedChecksumsSources) {
200         return new BasicRepositoryConnectorFactory(
201                 transporterProvider,
202                 layoutProvider,
203                 checksumPolicyProvider,
204                 checksumProcessor,
205                 providedChecksumsSources);
206     }
207 
208     @Named(OfflinePipelineRepositoryConnectorFactory.NAME)
209     @Provides
210     static OfflinePipelineRepositoryConnectorFactory newOfflinePipelineConnectorFactory(
211             OfflineController offlineController) {
212         return new OfflinePipelineRepositoryConnectorFactory(offlineController);
213     }
214 
215     @Named(FilteringPipelineRepositoryConnectorFactory.NAME)
216     @Provides
217     static FilteringPipelineRepositoryConnectorFactory newFilteringPipelineConnectorFactory(
218             RemoteRepositoryFilterManager remoteRepositoryFilterManager) {
219         return new FilteringPipelineRepositoryConnectorFactory(remoteRepositoryFilterManager);
220     }
221 
222     @Provides
223     static RepositoryLayoutProvider newRepositoryLayoutProvider(Map<String, RepositoryLayoutFactory> layoutFactories) {
224         return new DefaultRepositoryLayoutProvider(layoutFactories);
225     }
226 
227     @Provides
228     @Named(Maven2RepositoryLayoutFactory.NAME)
229     static Maven2RepositoryLayoutFactory newMaven2RepositoryLayoutFactory(
230             ChecksumAlgorithmFactorySelector checksumAlgorithmFactorySelector,
231             ArtifactPredicateFactory artifactPredicateFactory) {
232         return new Maven2RepositoryLayoutFactory(checksumAlgorithmFactorySelector, artifactPredicateFactory);
233     }
234 
235     @Provides
236     static SyncContextFactory newSyncContextFactory(NamedLockFactoryAdapterFactory namedLockFactoryAdapterFactory) {
237         return new DefaultSyncContextFactory(namedLockFactoryAdapterFactory);
238     }
239 
240     @Provides
241     static OfflineController newOfflineController() {
242         return new DefaultOfflineController();
243     }
244 
245     @Provides
246     static RemoteRepositoryFilterManager newRemoteRepositoryFilterManager(
247             Map<String, RemoteRepositoryFilterSource> sources) {
248         return new DefaultRemoteRepositoryFilterManager(sources);
249     }
250 
251     @Provides
252     @Named(GroupIdRemoteRepositoryFilterSource.NAME)
253     static GroupIdRemoteRepositoryFilterSource newGroupIdRemoteRepositoryFilterSource(
254             RepositorySystemLifecycle repositorySystemLifecycle) {
255         return new GroupIdRemoteRepositoryFilterSource(repositorySystemLifecycle);
256     }
257 
258     @Provides
259     @Named(PrefixesRemoteRepositoryFilterSource.NAME)
260     static PrefixesRemoteRepositoryFilterSource newPrefixesRemoteRepositoryFilterSource(
261             RepositoryLayoutProvider repositoryLayoutProvider) {
262         return new PrefixesRemoteRepositoryFilterSource(repositoryLayoutProvider);
263     }
264 
265     @Provides
266     static PathProcessor newPathProcessor() {
267         return new DefaultPathProcessor();
268     }
269 
270     @Provides
271     static List<ValidatorFactory> newValidatorFactories() {
272         return List.of(new MavenValidatorFactory());
273     }
274 
275     @Provides
276     static RepositorySystemValidator newRepositorySystemValidator(List<ValidatorFactory> validatorFactories) {
277         return new DefaultRepositorySystemValidator(validatorFactories);
278     }
279 
280     @Provides
281     static RepositorySystem newRepositorySystem(
282             VersionResolver versionResolver,
283             VersionRangeResolver versionRangeResolver,
284             ArtifactResolver artifactResolver,
285             MetadataResolver metadataResolver,
286             ArtifactDescriptorReader artifactDescriptorReader,
287             DependencyCollector dependencyCollector,
288             Installer installer,
289             Deployer deployer,
290             LocalRepositoryProvider localRepositoryProvider,
291             SyncContextFactory syncContextFactory,
292             RemoteRepositoryManager remoteRepositoryManager,
293             RepositorySystemLifecycle repositorySystemLifecycle,
294             @Nullable Map<String, ArtifactDecoratorFactory> artifactDecoratorFactories,
295             RepositorySystemValidator repositorySystemValidator) {
296         return new DefaultRepositorySystem(
297                 versionResolver,
298                 versionRangeResolver,
299                 artifactResolver,
300                 metadataResolver,
301                 artifactDescriptorReader,
302                 dependencyCollector,
303                 installer,
304                 deployer,
305                 localRepositoryProvider,
306                 syncContextFactory,
307                 remoteRepositoryManager,
308                 repositorySystemLifecycle,
309                 artifactDecoratorFactories != null ? artifactDecoratorFactories : Map.of(),
310                 repositorySystemValidator);
311     }
312 
313     @Provides
314     static RemoteRepositoryManager newRemoteRepositoryManager(
315             UpdatePolicyAnalyzer updatePolicyAnalyzer, ChecksumPolicyProvider checksumPolicyProvider) {
316         return new DefaultRemoteRepositoryManager(updatePolicyAnalyzer, checksumPolicyProvider);
317     }
318 
319     @Provides
320     static ChecksumPolicyProvider newChecksumPolicyProvider() {
321         return new DefaultChecksumPolicyProvider();
322     }
323 
324     @Provides
325     static NamedLockFactoryAdapterFactory newNamedLockFactoryAdapterFactory(
326             Map<String, NamedLockFactory> factories,
327             Map<String, NameMapper> nameMappers,
328             RepositorySystemLifecycle lifecycle) {
329         return new NamedLockFactoryAdapterFactoryImpl(factories, nameMappers, lifecycle);
330     }
331 
332     @Provides
333     @Named(FileLockNamedLockFactory.NAME)
334     static FileLockNamedLockFactory newFileLockNamedLockFactory() {
335         return new FileLockNamedLockFactory();
336     }
337 
338     @Provides
339     @Named(LocalReadWriteLockNamedLockFactory.NAME)
340     static LocalReadWriteLockNamedLockFactory newLocalReadWriteLockNamedLockFactory() {
341         return new LocalReadWriteLockNamedLockFactory();
342     }
343 
344     @Provides
345     @Named(LocalSemaphoreNamedLockFactory.NAME)
346     static LocalSemaphoreNamedLockFactory newLocalSemaphoreNamedLockFactory() {
347         return new LocalSemaphoreNamedLockFactory();
348     }
349 
350     @Provides
351     @Named(NoopNamedLockFactory.NAME)
352     static NoopNamedLockFactory newNoopNamedLockFactory() {
353         return new NoopNamedLockFactory();
354     }
355 
356     @Provides
357     @Named(NameMappers.STATIC_NAME)
358     static NameMapper staticNameMapper() {
359         return NameMappers.staticNameMapper();
360     }
361 
362     @Provides
363     @Named(NameMappers.GAV_NAME)
364     static NameMapper gavNameMapper() {
365         return NameMappers.gavNameMapper();
366     }
367 
368     @Provides
369     @Named(NameMappers.DISCRIMINATING_NAME)
370     static NameMapper discriminatingNameMapper() {
371         return NameMappers.discriminatingNameMapper();
372     }
373 
374     @Provides
375     @Named(NameMappers.FILE_GAV_NAME)
376     static NameMapper fileGavNameMapper() {
377         return NameMappers.fileGavNameMapper();
378     }
379 
380     @Provides
381     @Named(NameMappers.FILE_HGAV_NAME)
382     static NameMapper fileHashingGavNameMapper() {
383         return NameMappers.fileHashingGavNameMapper();
384     }
385 
386     @Provides
387     static RepositorySystemLifecycle newRepositorySystemLifecycle() {
388         return new DefaultRepositorySystemLifecycle();
389     }
390 
391     @Provides
392     static ArtifactResolver newArtifactResolver(
393             PathProcessor pathProcessor,
394             RepositoryEventDispatcher repositoryEventDispatcher,
395             VersionResolver versionResolver,
396             UpdateCheckManager updateCheckManager,
397             RepositoryConnectorProvider repositoryConnectorProvider,
398             RemoteRepositoryManager remoteRepositoryManager,
399             SyncContextFactory syncContextFactory,
400             OfflineController offlineController,
401             Map<String, ArtifactResolverPostProcessor> artifactResolverPostProcessors,
402             RemoteRepositoryFilterManager remoteRepositoryFilterManager) {
403         return new DefaultArtifactResolver(
404                 pathProcessor,
405                 repositoryEventDispatcher,
406                 versionResolver,
407                 updateCheckManager,
408                 repositoryConnectorProvider,
409                 remoteRepositoryManager,
410                 syncContextFactory,
411                 offlineController,
412                 artifactResolverPostProcessors,
413                 remoteRepositoryFilterManager);
414     }
415 
416     @Provides
417     static DependencyCollector newDependencyCollector(Map<String, DependencyCollectorDelegate> delegates) {
418         return new DefaultDependencyCollector(delegates);
419     }
420 
421     @Provides
422     @Named(BfDependencyCollector.NAME)
423     static BfDependencyCollector newBfDependencyCollector(
424             RemoteRepositoryManager remoteRepositoryManager,
425             ArtifactDescriptorReader artifactDescriptorReader,
426             VersionRangeResolver versionRangeResolver,
427             @Nullable Map<String, ArtifactDecoratorFactory> artifactDecoratorFactories) {
428         return new BfDependencyCollector(
429                 remoteRepositoryManager,
430                 artifactDescriptorReader,
431                 versionRangeResolver,
432                 artifactDecoratorFactories != null ? artifactDecoratorFactories : Map.of());
433     }
434 
435     @Provides
436     @Named(DfDependencyCollector.NAME)
437     static DfDependencyCollector newDfDependencyCollector(
438             RemoteRepositoryManager remoteRepositoryManager,
439             ArtifactDescriptorReader artifactDescriptorReader,
440             VersionRangeResolver versionRangeResolver,
441             @Nullable Map<String, ArtifactDecoratorFactory> artifactDecoratorFactories) {
442         return new DfDependencyCollector(
443                 remoteRepositoryManager,
444                 artifactDescriptorReader,
445                 versionRangeResolver,
446                 artifactDecoratorFactories != null ? artifactDecoratorFactories : Map.of());
447     }
448 
449     @Provides
450     static Installer newInstaller(
451             PathProcessor pathProcessor,
452             RepositoryEventDispatcher repositoryEventDispatcher,
453             @Nullable Map<String, ArtifactGeneratorFactory> artifactFactories,
454             Map<String, MetadataGeneratorFactory> metadataFactories,
455             SyncContextFactory syncContextFactory) {
456         return new DefaultInstaller(
457                 pathProcessor,
458                 repositoryEventDispatcher,
459                 artifactFactories != null ? artifactFactories : Map.of(),
460                 metadataFactories,
461                 Map.of(),
462                 syncContextFactory);
463     }
464 
465     @Provides
466     static Deployer newDeployer(
467             PathProcessor pathProcessor,
468             RepositoryEventDispatcher repositoryEventDispatcher,
469             RepositoryConnectorProvider repositoryConnectorProvider,
470             RemoteRepositoryManager remoteRepositoryManager,
471             UpdateCheckManager updateCheckManager,
472             @Nullable Map<String, ArtifactGeneratorFactory> artifactFactories,
473             Map<String, MetadataGeneratorFactory> metadataFactories,
474             SyncContextFactory syncContextFactory,
475             OfflineController offlineController) {
476         return new DefaultDeployer(
477                 pathProcessor,
478                 repositoryEventDispatcher,
479                 repositoryConnectorProvider,
480                 remoteRepositoryManager,
481                 updateCheckManager,
482                 artifactFactories != null ? artifactFactories : Map.of(),
483                 metadataFactories,
484                 Map.of(),
485                 syncContextFactory,
486                 offlineController);
487     }
488 
489     @Provides
490     static LocalRepositoryProvider newLocalRepositoryProvider(
491             Map<String, LocalRepositoryManagerFactory> localRepositoryManagerFactories) {
492         return new DefaultLocalRepositoryProvider(localRepositoryManagerFactories);
493     }
494 
495     @Provides
496     @Named(EnhancedLocalRepositoryManagerFactory.NAME)
497     static EnhancedLocalRepositoryManagerFactory newEnhancedLocalRepositoryManagerFactory(
498             LocalPathComposer localPathComposer,
499             TrackingFileManager trackingFileManager,
500             LocalPathPrefixComposerFactory localPathPrefixComposerFactory) {
501         return new EnhancedLocalRepositoryManagerFactory(
502                 localPathComposer, trackingFileManager, localPathPrefixComposerFactory);
503     }
504 
505     @Provides
506     @Named(SimpleLocalRepositoryManagerFactory.NAME)
507     static SimpleLocalRepositoryManagerFactory newSimpleLocalRepositoryManagerFactory(
508             LocalPathComposer localPathComposer) {
509         return new SimpleLocalRepositoryManagerFactory(localPathComposer);
510     }
511 
512     @Provides
513     static LocalPathComposer newLocalPathComposer() {
514         return new DefaultLocalPathComposer();
515     }
516 
517     @Provides
518     static LocalPathPrefixComposerFactory newLocalPathPrefixComposerFactory() {
519         return new DefaultLocalPathPrefixComposerFactory();
520     }
521 
522     @Provides
523     static TransporterProvider newTransportProvider(@Nullable Map<String, TransporterFactory> transporterFactories) {
524         return new DefaultTransporterProvider(transporterFactories != null ? transporterFactories : Map.of());
525     }
526 
527     @Provides
528     static ChecksumProcessor newChecksumProcessor(PathProcessor pathProcessor) {
529         return new DefaultChecksumProcessor(pathProcessor);
530     }
531 
532     @Provides
533     static ChecksumExtractor newChecksumExtractor(Map<String, ChecksumExtractorStrategy> strategies) {
534         return new DefaultChecksumExtractor(strategies);
535     }
536 
537     @Provides
538     @Named(Nx2ChecksumExtractor.NAME)
539     static Nx2ChecksumExtractor newNx2ChecksumExtractor() {
540         return new Nx2ChecksumExtractor();
541     }
542 
543     @Provides
544     @Named(XChecksumExtractor.NAME)
545     static XChecksumExtractor newXChecksumExtractor() {
546         return new XChecksumExtractor();
547     }
548 
549     @Provides
550     @Named(TrustedToProvidedChecksumsSourceAdapter.NAME)
551     static TrustedToProvidedChecksumsSourceAdapter newTrustedToProvidedChecksumsSourceAdapter(
552             Map<String, TrustedChecksumsSource> trustedChecksumsSources) {
553         return new TrustedToProvidedChecksumsSourceAdapter(trustedChecksumsSources);
554     }
555 
556     @Provides
557     @Named(SparseDirectoryTrustedChecksumsSource.NAME)
558     static SparseDirectoryTrustedChecksumsSource newSparseDirectoryTrustedChecksumsSource(
559             ChecksumProcessor checksumProcessor, LocalPathComposer localPathComposer) {
560         return new SparseDirectoryTrustedChecksumsSource(checksumProcessor, localPathComposer);
561     }
562 
563     @Provides
564     @Named(SummaryFileTrustedChecksumsSource.NAME)
565     static SummaryFileTrustedChecksumsSource newSummaryFileTrustedChecksumsSource(
566             LocalPathComposer localPathComposer, RepositorySystemLifecycle repositorySystemLifecycle) {
567         return new SummaryFileTrustedChecksumsSource(localPathComposer, repositorySystemLifecycle);
568     }
569 
570     @Provides
571     static ChecksumAlgorithmFactorySelector newChecksumAlgorithmFactorySelector(
572             Map<String, ChecksumAlgorithmFactory> factories) {
573         return new DefaultChecksumAlgorithmFactorySelector(factories);
574     }
575 
576     @Provides
577     @Named(Md5ChecksumAlgorithmFactory.NAME)
578     static Md5ChecksumAlgorithmFactory newMd5ChecksumAlgorithmFactory() {
579         return new Md5ChecksumAlgorithmFactory();
580     }
581 
582     @Provides
583     @Named(Sha1ChecksumAlgorithmFactory.NAME)
584     static Sha1ChecksumAlgorithmFactory newSh1ChecksumAlgorithmFactory() {
585         return new Sha1ChecksumAlgorithmFactory();
586     }
587 
588     @Provides
589     @Named(Sha256ChecksumAlgorithmFactory.NAME)
590     static Sha256ChecksumAlgorithmFactory newSh256ChecksumAlgorithmFactory() {
591         return new Sha256ChecksumAlgorithmFactory();
592     }
593 
594     @Provides
595     @Named(Sha512ChecksumAlgorithmFactory.NAME)
596     static Sha512ChecksumAlgorithmFactory newSh512ChecksumAlgorithmFactory() {
597         return new Sha512ChecksumAlgorithmFactory();
598     }
599 
600     @Provides
601     static ArtifactPredicateFactory newArtifactPredicateFactory(
602             ChecksumAlgorithmFactorySelector checksumAlgorithmFactorySelector) {
603         return new DefaultArtifactPredicateFactory(checksumAlgorithmFactorySelector);
604     }
605 }