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             PathProcessor pathProcessor,
199             ChecksumProcessor checksumProcessor,
200             Map<String, ProvidedChecksumsSource> providedChecksumsSources) {
201         return new BasicRepositoryConnectorFactory(
202                 transporterProvider,
203                 layoutProvider,
204                 checksumPolicyProvider,
205                 pathProcessor,
206                 checksumProcessor,
207                 providedChecksumsSources);
208     }
209 
210     @Named(OfflinePipelineRepositoryConnectorFactory.NAME)
211     @Provides
212     static OfflinePipelineRepositoryConnectorFactory newOfflinePipelineConnectorFactory(
213             OfflineController offlineController) {
214         return new OfflinePipelineRepositoryConnectorFactory(offlineController);
215     }
216 
217     @Named(FilteringPipelineRepositoryConnectorFactory.NAME)
218     @Provides
219     static FilteringPipelineRepositoryConnectorFactory newFilteringPipelineConnectorFactory(
220             RemoteRepositoryFilterManager remoteRepositoryFilterManager) {
221         return new FilteringPipelineRepositoryConnectorFactory(remoteRepositoryFilterManager);
222     }
223 
224     @Provides
225     static RepositoryLayoutProvider newRepositoryLayoutProvider(Map<String, RepositoryLayoutFactory> layoutFactories) {
226         return new DefaultRepositoryLayoutProvider(layoutFactories);
227     }
228 
229     @Provides
230     @Named(Maven2RepositoryLayoutFactory.NAME)
231     static Maven2RepositoryLayoutFactory newMaven2RepositoryLayoutFactory(
232             ChecksumAlgorithmFactorySelector checksumAlgorithmFactorySelector,
233             ArtifactPredicateFactory artifactPredicateFactory) {
234         return new Maven2RepositoryLayoutFactory(checksumAlgorithmFactorySelector, artifactPredicateFactory);
235     }
236 
237     @Provides
238     static SyncContextFactory newSyncContextFactory(NamedLockFactoryAdapterFactory namedLockFactoryAdapterFactory) {
239         return new DefaultSyncContextFactory(namedLockFactoryAdapterFactory);
240     }
241 
242     @Provides
243     static OfflineController newOfflineController() {
244         return new DefaultOfflineController();
245     }
246 
247     @Provides
248     static RemoteRepositoryFilterManager newRemoteRepositoryFilterManager(
249             Map<String, RemoteRepositoryFilterSource> sources) {
250         return new DefaultRemoteRepositoryFilterManager(sources);
251     }
252 
253     @Provides
254     @Named(GroupIdRemoteRepositoryFilterSource.NAME)
255     static GroupIdRemoteRepositoryFilterSource newGroupIdRemoteRepositoryFilterSource(
256             RepositorySystemLifecycle repositorySystemLifecycle, PathProcessor pathProcessor) {
257         return new GroupIdRemoteRepositoryFilterSource(repositorySystemLifecycle, pathProcessor);
258     }
259 
260     @Provides
261     @Named(PrefixesRemoteRepositoryFilterSource.NAME)
262     static PrefixesRemoteRepositoryFilterSource newPrefixesRemoteRepositoryFilterSource(
263             MetadataResolver metadataResolver,
264             RemoteRepositoryManager remoteRepositoryManager,
265             RepositoryLayoutProvider repositoryLayoutProvider) {
266         return new PrefixesRemoteRepositoryFilterSource(
267                 () -> metadataResolver, () -> remoteRepositoryManager, repositoryLayoutProvider);
268     }
269 
270     @Provides
271     static PathProcessor newPathProcessor() {
272         return new DefaultPathProcessor();
273     }
274 
275     @Provides
276     static List<ValidatorFactory> newValidatorFactories() {
277         return List.of(new MavenValidatorFactory());
278     }
279 
280     @Provides
281     static RepositorySystemValidator newRepositorySystemValidator(List<ValidatorFactory> validatorFactories) {
282         return new DefaultRepositorySystemValidator(validatorFactories);
283     }
284 
285     @Provides
286     static RepositorySystem newRepositorySystem(
287             VersionResolver versionResolver,
288             VersionRangeResolver versionRangeResolver,
289             ArtifactResolver artifactResolver,
290             MetadataResolver metadataResolver,
291             ArtifactDescriptorReader artifactDescriptorReader,
292             DependencyCollector dependencyCollector,
293             Installer installer,
294             Deployer deployer,
295             LocalRepositoryProvider localRepositoryProvider,
296             SyncContextFactory syncContextFactory,
297             RemoteRepositoryManager remoteRepositoryManager,
298             RepositorySystemLifecycle repositorySystemLifecycle,
299             @Nullable Map<String, ArtifactDecoratorFactory> artifactDecoratorFactories,
300             RepositorySystemValidator repositorySystemValidator) {
301         return new DefaultRepositorySystem(
302                 versionResolver,
303                 versionRangeResolver,
304                 artifactResolver,
305                 metadataResolver,
306                 artifactDescriptorReader,
307                 dependencyCollector,
308                 installer,
309                 deployer,
310                 localRepositoryProvider,
311                 syncContextFactory,
312                 remoteRepositoryManager,
313                 repositorySystemLifecycle,
314                 artifactDecoratorFactories != null ? artifactDecoratorFactories : Map.of(),
315                 repositorySystemValidator);
316     }
317 
318     @Provides
319     static RemoteRepositoryManager newRemoteRepositoryManager(
320             UpdatePolicyAnalyzer updatePolicyAnalyzer, ChecksumPolicyProvider checksumPolicyProvider) {
321         return new DefaultRemoteRepositoryManager(updatePolicyAnalyzer, checksumPolicyProvider);
322     }
323 
324     @Provides
325     static ChecksumPolicyProvider newChecksumPolicyProvider() {
326         return new DefaultChecksumPolicyProvider();
327     }
328 
329     @Provides
330     static NamedLockFactoryAdapterFactory newNamedLockFactoryAdapterFactory(
331             Map<String, NamedLockFactory> factories,
332             Map<String, NameMapper> nameMappers,
333             RepositorySystemLifecycle lifecycle) {
334         return new NamedLockFactoryAdapterFactoryImpl(factories, nameMappers, lifecycle);
335     }
336 
337     @Provides
338     @Named(FileLockNamedLockFactory.NAME)
339     static FileLockNamedLockFactory newFileLockNamedLockFactory() {
340         return new FileLockNamedLockFactory();
341     }
342 
343     @Provides
344     @Named(LocalReadWriteLockNamedLockFactory.NAME)
345     static LocalReadWriteLockNamedLockFactory newLocalReadWriteLockNamedLockFactory() {
346         return new LocalReadWriteLockNamedLockFactory();
347     }
348 
349     @Provides
350     @Named(LocalSemaphoreNamedLockFactory.NAME)
351     static LocalSemaphoreNamedLockFactory newLocalSemaphoreNamedLockFactory() {
352         return new LocalSemaphoreNamedLockFactory();
353     }
354 
355     @Provides
356     @Named(NoopNamedLockFactory.NAME)
357     static NoopNamedLockFactory newNoopNamedLockFactory() {
358         return new NoopNamedLockFactory();
359     }
360 
361     @Provides
362     @Named(NameMappers.STATIC_NAME)
363     static NameMapper staticNameMapper() {
364         return NameMappers.staticNameMapper();
365     }
366 
367     @Provides
368     @Named(NameMappers.GAV_NAME)
369     static NameMapper gavNameMapper() {
370         return NameMappers.gavNameMapper();
371     }
372 
373     @Provides
374     @Named(NameMappers.DISCRIMINATING_NAME)
375     static NameMapper discriminatingNameMapper() {
376         return NameMappers.discriminatingNameMapper();
377     }
378 
379     @Provides
380     @Named(NameMappers.FILE_GAV_NAME)
381     static NameMapper fileGavNameMapper() {
382         return NameMappers.fileGavNameMapper();
383     }
384 
385     @Provides
386     @Named(NameMappers.FILE_HGAV_NAME)
387     static NameMapper fileHashingGavNameMapper() {
388         return NameMappers.fileHashingGavNameMapper();
389     }
390 
391     @Provides
392     static RepositorySystemLifecycle newRepositorySystemLifecycle() {
393         return new DefaultRepositorySystemLifecycle();
394     }
395 
396     @Provides
397     static ArtifactResolver newArtifactResolver(
398             PathProcessor pathProcessor,
399             RepositoryEventDispatcher repositoryEventDispatcher,
400             VersionResolver versionResolver,
401             UpdateCheckManager updateCheckManager,
402             RepositoryConnectorProvider repositoryConnectorProvider,
403             RemoteRepositoryManager remoteRepositoryManager,
404             SyncContextFactory syncContextFactory,
405             OfflineController offlineController,
406             Map<String, ArtifactResolverPostProcessor> artifactResolverPostProcessors,
407             RemoteRepositoryFilterManager remoteRepositoryFilterManager) {
408         return new DefaultArtifactResolver(
409                 pathProcessor,
410                 repositoryEventDispatcher,
411                 versionResolver,
412                 updateCheckManager,
413                 repositoryConnectorProvider,
414                 remoteRepositoryManager,
415                 syncContextFactory,
416                 offlineController,
417                 artifactResolverPostProcessors,
418                 remoteRepositoryFilterManager);
419     }
420 
421     @Provides
422     static DependencyCollector newDependencyCollector(Map<String, DependencyCollectorDelegate> delegates) {
423         return new DefaultDependencyCollector(delegates);
424     }
425 
426     @Provides
427     @Named(BfDependencyCollector.NAME)
428     static BfDependencyCollector newBfDependencyCollector(
429             RemoteRepositoryManager remoteRepositoryManager,
430             ArtifactDescriptorReader artifactDescriptorReader,
431             VersionRangeResolver versionRangeResolver,
432             @Nullable Map<String, ArtifactDecoratorFactory> artifactDecoratorFactories) {
433         return new BfDependencyCollector(
434                 remoteRepositoryManager,
435                 artifactDescriptorReader,
436                 versionRangeResolver,
437                 artifactDecoratorFactories != null ? artifactDecoratorFactories : Map.of());
438     }
439 
440     @Provides
441     @Named(DfDependencyCollector.NAME)
442     static DfDependencyCollector newDfDependencyCollector(
443             RemoteRepositoryManager remoteRepositoryManager,
444             ArtifactDescriptorReader artifactDescriptorReader,
445             VersionRangeResolver versionRangeResolver,
446             @Nullable Map<String, ArtifactDecoratorFactory> artifactDecoratorFactories) {
447         return new DfDependencyCollector(
448                 remoteRepositoryManager,
449                 artifactDescriptorReader,
450                 versionRangeResolver,
451                 artifactDecoratorFactories != null ? artifactDecoratorFactories : Map.of());
452     }
453 
454     @Provides
455     static Installer newInstaller(
456             PathProcessor pathProcessor,
457             RepositoryEventDispatcher repositoryEventDispatcher,
458             @Nullable Map<String, ArtifactGeneratorFactory> artifactFactories,
459             Map<String, MetadataGeneratorFactory> metadataFactories,
460             SyncContextFactory syncContextFactory) {
461         return new DefaultInstaller(
462                 pathProcessor,
463                 repositoryEventDispatcher,
464                 artifactFactories != null ? artifactFactories : Map.of(),
465                 metadataFactories,
466                 Map.of(),
467                 syncContextFactory);
468     }
469 
470     @Provides
471     static Deployer newDeployer(
472             PathProcessor pathProcessor,
473             RepositoryEventDispatcher repositoryEventDispatcher,
474             RepositoryConnectorProvider repositoryConnectorProvider,
475             RemoteRepositoryManager remoteRepositoryManager,
476             UpdateCheckManager updateCheckManager,
477             @Nullable Map<String, ArtifactGeneratorFactory> artifactFactories,
478             Map<String, MetadataGeneratorFactory> metadataFactories,
479             SyncContextFactory syncContextFactory,
480             OfflineController offlineController) {
481         return new DefaultDeployer(
482                 pathProcessor,
483                 repositoryEventDispatcher,
484                 repositoryConnectorProvider,
485                 remoteRepositoryManager,
486                 updateCheckManager,
487                 artifactFactories != null ? artifactFactories : Map.of(),
488                 metadataFactories,
489                 Map.of(),
490                 syncContextFactory,
491                 offlineController);
492     }
493 
494     @Provides
495     static LocalRepositoryProvider newLocalRepositoryProvider(
496             Map<String, LocalRepositoryManagerFactory> localRepositoryManagerFactories) {
497         return new DefaultLocalRepositoryProvider(localRepositoryManagerFactories);
498     }
499 
500     @Provides
501     @Named(EnhancedLocalRepositoryManagerFactory.NAME)
502     static EnhancedLocalRepositoryManagerFactory newEnhancedLocalRepositoryManagerFactory(
503             LocalPathComposer localPathComposer,
504             TrackingFileManager trackingFileManager,
505             LocalPathPrefixComposerFactory localPathPrefixComposerFactory) {
506         return new EnhancedLocalRepositoryManagerFactory(
507                 localPathComposer, trackingFileManager, localPathPrefixComposerFactory);
508     }
509 
510     @Provides
511     @Named(SimpleLocalRepositoryManagerFactory.NAME)
512     static SimpleLocalRepositoryManagerFactory newSimpleLocalRepositoryManagerFactory(
513             LocalPathComposer localPathComposer) {
514         return new SimpleLocalRepositoryManagerFactory(localPathComposer);
515     }
516 
517     @Provides
518     static LocalPathComposer newLocalPathComposer() {
519         return new DefaultLocalPathComposer();
520     }
521 
522     @Provides
523     static LocalPathPrefixComposerFactory newLocalPathPrefixComposerFactory() {
524         return new DefaultLocalPathPrefixComposerFactory();
525     }
526 
527     @Provides
528     static TransporterProvider newTransportProvider(@Nullable Map<String, TransporterFactory> transporterFactories) {
529         return new DefaultTransporterProvider(transporterFactories != null ? transporterFactories : Map.of());
530     }
531 
532     @Provides
533     static ChecksumProcessor newChecksumProcessor(PathProcessor pathProcessor) {
534         return new DefaultChecksumProcessor(pathProcessor);
535     }
536 
537     @Provides
538     static ChecksumExtractor newChecksumExtractor(Map<String, ChecksumExtractorStrategy> strategies) {
539         return new DefaultChecksumExtractor(strategies);
540     }
541 
542     @Provides
543     @Named(Nx2ChecksumExtractor.NAME)
544     static Nx2ChecksumExtractor newNx2ChecksumExtractor() {
545         return new Nx2ChecksumExtractor();
546     }
547 
548     @Provides
549     @Named(XChecksumExtractor.NAME)
550     static XChecksumExtractor newXChecksumExtractor() {
551         return new XChecksumExtractor();
552     }
553 
554     @Provides
555     @Named(TrustedToProvidedChecksumsSourceAdapter.NAME)
556     static TrustedToProvidedChecksumsSourceAdapter newTrustedToProvidedChecksumsSourceAdapter(
557             Map<String, TrustedChecksumsSource> trustedChecksumsSources) {
558         return new TrustedToProvidedChecksumsSourceAdapter(trustedChecksumsSources);
559     }
560 
561     @Provides
562     @Named(SparseDirectoryTrustedChecksumsSource.NAME)
563     static SparseDirectoryTrustedChecksumsSource newSparseDirectoryTrustedChecksumsSource(
564             ChecksumProcessor checksumProcessor, LocalPathComposer localPathComposer) {
565         return new SparseDirectoryTrustedChecksumsSource(checksumProcessor, localPathComposer);
566     }
567 
568     @Provides
569     @Named(SummaryFileTrustedChecksumsSource.NAME)
570     static SummaryFileTrustedChecksumsSource newSummaryFileTrustedChecksumsSource(
571             LocalPathComposer localPathComposer,
572             RepositorySystemLifecycle repositorySystemLifecycle,
573             PathProcessor pathProcessor) {
574         return new SummaryFileTrustedChecksumsSource(localPathComposer, repositorySystemLifecycle, pathProcessor);
575     }
576 
577     @Provides
578     static ChecksumAlgorithmFactorySelector newChecksumAlgorithmFactorySelector(
579             Map<String, ChecksumAlgorithmFactory> factories) {
580         return new DefaultChecksumAlgorithmFactorySelector(factories);
581     }
582 
583     @Provides
584     @Named(Md5ChecksumAlgorithmFactory.NAME)
585     static Md5ChecksumAlgorithmFactory newMd5ChecksumAlgorithmFactory() {
586         return new Md5ChecksumAlgorithmFactory();
587     }
588 
589     @Provides
590     @Named(Sha1ChecksumAlgorithmFactory.NAME)
591     static Sha1ChecksumAlgorithmFactory newSh1ChecksumAlgorithmFactory() {
592         return new Sha1ChecksumAlgorithmFactory();
593     }
594 
595     @Provides
596     @Named(Sha256ChecksumAlgorithmFactory.NAME)
597     static Sha256ChecksumAlgorithmFactory newSh256ChecksumAlgorithmFactory() {
598         return new Sha256ChecksumAlgorithmFactory();
599     }
600 
601     @Provides
602     @Named(Sha512ChecksumAlgorithmFactory.NAME)
603     static Sha512ChecksumAlgorithmFactory newSh512ChecksumAlgorithmFactory() {
604         return new Sha512ChecksumAlgorithmFactory();
605     }
606 
607     @Provides
608     static ArtifactPredicateFactory newArtifactPredicateFactory(
609             ChecksumAlgorithmFactorySelector checksumAlgorithmFactorySelector) {
610         return new DefaultArtifactPredicateFactory(checksumAlgorithmFactorySelector);
611     }
612 }