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