001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019package org.eclipse.aether.impl.guice; 020 021import javax.inject.Named; 022import javax.inject.Singleton; 023 024import java.util.Collections; 025import java.util.HashMap; 026import java.util.HashSet; 027import java.util.Map; 028import java.util.Set; 029 030import com.google.inject.AbstractModule; 031import com.google.inject.Provides; 032import com.google.inject.name.Names; 033import org.eclipse.aether.RepositoryListener; 034import org.eclipse.aether.RepositorySystem; 035import org.eclipse.aether.impl.ArtifactResolver; 036import org.eclipse.aether.impl.DependencyCollector; 037import org.eclipse.aether.impl.Deployer; 038import org.eclipse.aether.impl.Installer; 039import org.eclipse.aether.impl.LocalRepositoryProvider; 040import org.eclipse.aether.impl.MetadataResolver; 041import org.eclipse.aether.impl.OfflineController; 042import org.eclipse.aether.impl.RemoteRepositoryFilterManager; 043import org.eclipse.aether.impl.RemoteRepositoryManager; 044import org.eclipse.aether.impl.RepositoryConnectorProvider; 045import org.eclipse.aether.impl.RepositoryEventDispatcher; 046import org.eclipse.aether.impl.RepositorySystemLifecycle; 047import org.eclipse.aether.impl.UpdateCheckManager; 048import org.eclipse.aether.impl.UpdatePolicyAnalyzer; 049import org.eclipse.aether.internal.impl.DefaultArtifactResolver; 050import org.eclipse.aether.internal.impl.DefaultChecksumPolicyProvider; 051import org.eclipse.aether.internal.impl.DefaultDeployer; 052import org.eclipse.aether.internal.impl.DefaultFileProcessor; 053import org.eclipse.aether.internal.impl.DefaultInstaller; 054import org.eclipse.aether.internal.impl.DefaultLocalPathComposer; 055import org.eclipse.aether.internal.impl.DefaultLocalPathPrefixComposerFactory; 056import org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider; 057import org.eclipse.aether.internal.impl.DefaultMetadataResolver; 058import org.eclipse.aether.internal.impl.DefaultOfflineController; 059import org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager; 060import org.eclipse.aether.internal.impl.DefaultRepositoryConnectorProvider; 061import org.eclipse.aether.internal.impl.DefaultRepositoryEventDispatcher; 062import org.eclipse.aether.internal.impl.DefaultRepositoryLayoutProvider; 063import org.eclipse.aether.internal.impl.DefaultRepositorySystem; 064import org.eclipse.aether.internal.impl.DefaultRepositorySystemLifecycle; 065import org.eclipse.aether.internal.impl.DefaultTrackingFileManager; 066import org.eclipse.aether.internal.impl.DefaultTransporterProvider; 067import org.eclipse.aether.internal.impl.DefaultUpdateCheckManager; 068import org.eclipse.aether.internal.impl.DefaultUpdatePolicyAnalyzer; 069import org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManagerFactory; 070import org.eclipse.aether.internal.impl.LocalPathComposer; 071import org.eclipse.aether.internal.impl.LocalPathPrefixComposerFactory; 072import org.eclipse.aether.internal.impl.Maven2RepositoryLayoutFactory; 073import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory; 074import org.eclipse.aether.internal.impl.TrackingFileManager; 075import org.eclipse.aether.internal.impl.checksum.DefaultChecksumAlgorithmFactorySelector; 076import org.eclipse.aether.internal.impl.checksum.Md5ChecksumAlgorithmFactory; 077import org.eclipse.aether.internal.impl.checksum.Sha1ChecksumAlgorithmFactory; 078import org.eclipse.aether.internal.impl.checksum.Sha256ChecksumAlgorithmFactory; 079import org.eclipse.aether.internal.impl.checksum.Sha512ChecksumAlgorithmFactory; 080import org.eclipse.aether.internal.impl.checksum.SparseDirectoryTrustedChecksumsSource; 081import org.eclipse.aether.internal.impl.checksum.SummaryFileTrustedChecksumsSource; 082import org.eclipse.aether.internal.impl.checksum.TrustedToProvidedChecksumsSourceAdapter; 083import org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector; 084import org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate; 085import org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector; 086import org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector; 087import org.eclipse.aether.internal.impl.filter.DefaultRemoteRepositoryFilterManager; 088import org.eclipse.aether.internal.impl.filter.GroupIdRemoteRepositoryFilterSource; 089import org.eclipse.aether.internal.impl.filter.PrefixesRemoteRepositoryFilterSource; 090import org.eclipse.aether.internal.impl.resolution.TrustedChecksumsArtifactResolverPostProcessor; 091import org.eclipse.aether.internal.impl.slf4j.Slf4jLoggerFactory; 092import org.eclipse.aether.internal.impl.synccontext.DefaultSyncContextFactory; 093import org.eclipse.aether.internal.impl.synccontext.named.NameMapper; 094import org.eclipse.aether.internal.impl.synccontext.named.NameMappers; 095import org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapterFactory; 096import org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapterFactoryImpl; 097import org.eclipse.aether.internal.impl.synccontext.named.providers.DiscriminatingNameMapperProvider; 098import org.eclipse.aether.internal.impl.synccontext.named.providers.FileGAECVNameMapperProvider; 099import org.eclipse.aether.internal.impl.synccontext.named.providers.FileGAVNameMapperProvider; 100import org.eclipse.aether.internal.impl.synccontext.named.providers.FileHashingGAECVNameMapperProvider; 101import org.eclipse.aether.internal.impl.synccontext.named.providers.FileHashingGAVNameMapperProvider; 102import org.eclipse.aether.internal.impl.synccontext.named.providers.GAECVNameMapperProvider; 103import org.eclipse.aether.internal.impl.synccontext.named.providers.GAVNameMapperProvider; 104import org.eclipse.aether.internal.impl.synccontext.named.providers.StaticNameMapperProvider; 105import org.eclipse.aether.named.NamedLockFactory; 106import org.eclipse.aether.named.providers.FileLockNamedLockFactory; 107import org.eclipse.aether.named.providers.LocalReadWriteLockNamedLockFactory; 108import org.eclipse.aether.named.providers.LocalSemaphoreNamedLockFactory; 109import org.eclipse.aether.named.providers.NoopNamedLockFactory; 110import org.eclipse.aether.spi.checksums.ProvidedChecksumsSource; 111import org.eclipse.aether.spi.checksums.TrustedChecksumsSource; 112import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactory; 113import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactorySelector; 114import org.eclipse.aether.spi.connector.checksum.ChecksumPolicyProvider; 115import org.eclipse.aether.spi.connector.filter.RemoteRepositoryFilterSource; 116import org.eclipse.aether.spi.connector.layout.RepositoryLayoutFactory; 117import org.eclipse.aether.spi.connector.layout.RepositoryLayoutProvider; 118import org.eclipse.aether.spi.connector.transport.TransporterProvider; 119import org.eclipse.aether.spi.io.FileProcessor; 120import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory; 121import org.eclipse.aether.spi.log.LoggerFactory; 122import org.eclipse.aether.spi.resolution.ArtifactResolverPostProcessor; 123import org.eclipse.aether.spi.synccontext.SyncContextFactory; 124import org.slf4j.ILoggerFactory; 125 126/** 127 * A ready-made <a href="https://github.com/google/guice" target="_blank">Guice</a> module that sets up bindings 128 * for all components from this library. To acquire a complete repository system, clients need to bind an artifact 129 * descriptor reader, a version resolver, a version range resolver, zero or more metadata generator factories, some 130 * repository connector and transporter factories to access remote repositories. 131 * 132 * @noextend This class must not be extended by clients and will eventually be marked {@code final} without prior 133 * notice. 134 * @deprecated This class is about to be dropped in 2.0.0 release. Use SISU or use maven-resolver-supplier to 135 * get Resolver instances. 136 */ 137@Deprecated 138public class AetherModule extends AbstractModule { 139 140 /** 141 * Creates a new instance of this Guice module, typically for invoking 142 * {@link com.google.inject.Binder#install(com.google.inject.Module)}. 143 */ 144 public AetherModule() {} 145 146 /** 147 * Configures Guice with bindings for Aether components provided by this library. 148 */ 149 // CHECKSTYLE_OFF: MethodLength 150 @Override 151 protected void configure() { 152 bind(RepositorySystem.class) // 153 .to(DefaultRepositorySystem.class) 154 .in(Singleton.class); 155 bind(ArtifactResolver.class) // 156 .to(DefaultArtifactResolver.class) 157 .in(Singleton.class); 158 159 bind(DependencyCollector.class) // 160 .to(DefaultDependencyCollector.class) 161 .in(Singleton.class); 162 bind(DependencyCollectorDelegate.class) 163 .annotatedWith(Names.named(BfDependencyCollector.NAME)) 164 .to(BfDependencyCollector.class) 165 .in(Singleton.class); 166 bind(DependencyCollectorDelegate.class) 167 .annotatedWith(Names.named(DfDependencyCollector.NAME)) 168 .to(DfDependencyCollector.class) 169 .in(Singleton.class); 170 171 bind(Deployer.class) // 172 .to(DefaultDeployer.class) 173 .in(Singleton.class); 174 bind(Installer.class) // 175 .to(DefaultInstaller.class) 176 .in(Singleton.class); 177 bind(MetadataResolver.class) // 178 .to(DefaultMetadataResolver.class) 179 .in(Singleton.class); 180 bind(RepositoryLayoutProvider.class) // 181 .to(DefaultRepositoryLayoutProvider.class) 182 .in(Singleton.class); 183 bind(RepositoryLayoutFactory.class) 184 .annotatedWith(Names.named("maven2")) // 185 .to(Maven2RepositoryLayoutFactory.class) 186 .in(Singleton.class); 187 bind(TransporterProvider.class) // 188 .to(DefaultTransporterProvider.class) 189 .in(Singleton.class); 190 bind(ChecksumPolicyProvider.class) // 191 .to(DefaultChecksumPolicyProvider.class) 192 .in(Singleton.class); 193 bind(RepositoryConnectorProvider.class) // 194 .to(DefaultRepositoryConnectorProvider.class) 195 .in(Singleton.class); 196 bind(RemoteRepositoryManager.class) // 197 .to(DefaultRemoteRepositoryManager.class) 198 .in(Singleton.class); 199 bind(UpdateCheckManager.class) // 200 .to(DefaultUpdateCheckManager.class) 201 .in(Singleton.class); 202 bind(UpdatePolicyAnalyzer.class) // 203 .to(DefaultUpdatePolicyAnalyzer.class) 204 .in(Singleton.class); 205 bind(FileProcessor.class) // 206 .to(DefaultFileProcessor.class) 207 .in(Singleton.class); 208 bind(RepositoryEventDispatcher.class) // 209 .to(DefaultRepositoryEventDispatcher.class) 210 .in(Singleton.class); 211 bind(OfflineController.class) // 212 .to(DefaultOfflineController.class) 213 .in(Singleton.class); 214 215 bind(LocalPathComposer.class).to(DefaultLocalPathComposer.class).in(Singleton.class); 216 bind(LocalPathPrefixComposerFactory.class) 217 .to(DefaultLocalPathPrefixComposerFactory.class) 218 .in(Singleton.class); 219 220 bind(LocalRepositoryProvider.class) // 221 .to(DefaultLocalRepositoryProvider.class) 222 .in(Singleton.class); 223 bind(LocalRepositoryManagerFactory.class) 224 .annotatedWith(Names.named("simple")) // 225 .to(SimpleLocalRepositoryManagerFactory.class) 226 .in(Singleton.class); 227 bind(LocalRepositoryManagerFactory.class) 228 .annotatedWith(Names.named("enhanced")) // 229 .to(EnhancedLocalRepositoryManagerFactory.class) 230 .in(Singleton.class); 231 bind(TrackingFileManager.class).to(DefaultTrackingFileManager.class).in(Singleton.class); 232 233 bind(ProvidedChecksumsSource.class) 234 .annotatedWith(Names.named(TrustedToProvidedChecksumsSourceAdapter.NAME)) 235 .to(TrustedToProvidedChecksumsSourceAdapter.class) 236 .in(Singleton.class); 237 238 bind(TrustedChecksumsSource.class) 239 .annotatedWith(Names.named(SparseDirectoryTrustedChecksumsSource.NAME)) 240 .to(SparseDirectoryTrustedChecksumsSource.class) 241 .in(Singleton.class); 242 bind(TrustedChecksumsSource.class) 243 .annotatedWith(Names.named(SummaryFileTrustedChecksumsSource.NAME)) 244 .to(SummaryFileTrustedChecksumsSource.class) 245 .in(Singleton.class); 246 247 bind(ArtifactResolverPostProcessor.class) 248 .annotatedWith(Names.named(TrustedChecksumsArtifactResolverPostProcessor.NAME)) 249 .to(TrustedChecksumsArtifactResolverPostProcessor.class) 250 .in(Singleton.class); 251 252 bind(ChecksumAlgorithmFactory.class) 253 .annotatedWith(Names.named(Md5ChecksumAlgorithmFactory.NAME)) 254 .to(Md5ChecksumAlgorithmFactory.class); 255 bind(ChecksumAlgorithmFactory.class) 256 .annotatedWith(Names.named(Sha1ChecksumAlgorithmFactory.NAME)) 257 .to(Sha1ChecksumAlgorithmFactory.class); 258 bind(ChecksumAlgorithmFactory.class) 259 .annotatedWith(Names.named(Sha256ChecksumAlgorithmFactory.NAME)) 260 .to(Sha256ChecksumAlgorithmFactory.class); 261 bind(ChecksumAlgorithmFactory.class) 262 .annotatedWith(Names.named(Sha512ChecksumAlgorithmFactory.NAME)) 263 .to(Sha512ChecksumAlgorithmFactory.class); 264 bind(ChecksumAlgorithmFactorySelector.class) 265 .to(DefaultChecksumAlgorithmFactorySelector.class) 266 .in(Singleton.class); 267 268 bind(RepositorySystemLifecycle.class) 269 .to(DefaultRepositorySystemLifecycle.class) 270 .in(Singleton.class); 271 272 bind(NamedLockFactoryAdapterFactory.class) 273 .to(NamedLockFactoryAdapterFactoryImpl.class) 274 .in(Singleton.class); 275 bind(SyncContextFactory.class).to(DefaultSyncContextFactory.class).in(Singleton.class); 276 bind(org.eclipse.aether.impl.SyncContextFactory.class) 277 .to(org.eclipse.aether.internal.impl.synccontext.legacy.DefaultSyncContextFactory.class) 278 .in(Singleton.class); 279 280 bind(NameMapper.class) 281 .annotatedWith(Names.named(NameMappers.STATIC_NAME)) 282 .toProvider(StaticNameMapperProvider.class) 283 .in(Singleton.class); 284 bind(NameMapper.class) 285 .annotatedWith(Names.named(NameMappers.GAV_NAME)) 286 .toProvider(GAVNameMapperProvider.class) 287 .in(Singleton.class); 288 bind(NameMapper.class) 289 .annotatedWith(Names.named(NameMappers.GAECV_NAME)) 290 .toProvider(GAECVNameMapperProvider.class) 291 .in(Singleton.class); 292 bind(NameMapper.class) 293 .annotatedWith(Names.named(NameMappers.DISCRIMINATING_NAME)) 294 .toProvider(DiscriminatingNameMapperProvider.class) 295 .in(Singleton.class); 296 bind(NameMapper.class) 297 .annotatedWith(Names.named(NameMappers.FILE_GAV_NAME)) 298 .toProvider(FileGAVNameMapperProvider.class) 299 .in(Singleton.class); 300 bind(NameMapper.class) 301 .annotatedWith(Names.named(NameMappers.FILE_GAECV_NAME)) 302 .toProvider(FileGAECVNameMapperProvider.class) 303 .in(Singleton.class); 304 bind(NameMapper.class) 305 .annotatedWith(Names.named(NameMappers.FILE_HGAV_NAME)) 306 .toProvider(FileHashingGAVNameMapperProvider.class) 307 .in(Singleton.class); 308 bind(NameMapper.class) 309 .annotatedWith(Names.named(NameMappers.FILE_HGAECV_NAME)) 310 .toProvider(FileHashingGAECVNameMapperProvider.class) 311 .in(Singleton.class); 312 313 bind(NamedLockFactory.class) 314 .annotatedWith(Names.named(NoopNamedLockFactory.NAME)) 315 .to(NoopNamedLockFactory.class) 316 .in(Singleton.class); 317 bind(NamedLockFactory.class) 318 .annotatedWith(Names.named(LocalReadWriteLockNamedLockFactory.NAME)) 319 .to(LocalReadWriteLockNamedLockFactory.class) 320 .in(Singleton.class); 321 bind(NamedLockFactory.class) 322 .annotatedWith(Names.named(LocalSemaphoreNamedLockFactory.NAME)) 323 .to(LocalSemaphoreNamedLockFactory.class) 324 .in(Singleton.class); 325 bind(NamedLockFactory.class) 326 .annotatedWith(Names.named(FileLockNamedLockFactory.NAME)) 327 .to(FileLockNamedLockFactory.class) 328 .in(Singleton.class); 329 330 bind(RemoteRepositoryFilterManager.class) 331 .to(DefaultRemoteRepositoryFilterManager.class) 332 .in(Singleton.class); 333 bind(RemoteRepositoryFilterSource.class) 334 .annotatedWith(Names.named(GroupIdRemoteRepositoryFilterSource.NAME)) 335 .to(GroupIdRemoteRepositoryFilterSource.class) 336 .in(Singleton.class); 337 bind(RemoteRepositoryFilterSource.class) 338 .annotatedWith(Names.named(PrefixesRemoteRepositoryFilterSource.NAME)) 339 .to(PrefixesRemoteRepositoryFilterSource.class) 340 .in(Singleton.class); 341 342 install(new Slf4jModule()); 343 } 344 345 @Provides 346 @Singleton 347 Map<String, RemoteRepositoryFilterSource> remoteRepositoryFilterSources( 348 @Named(GroupIdRemoteRepositoryFilterSource.NAME) RemoteRepositoryFilterSource groupId, 349 @Named(PrefixesRemoteRepositoryFilterSource.NAME) RemoteRepositoryFilterSource prefixes) { 350 Map<String, RemoteRepositoryFilterSource> result = new HashMap<>(); 351 result.put(GroupIdRemoteRepositoryFilterSource.NAME, groupId); 352 result.put(PrefixesRemoteRepositoryFilterSource.NAME, prefixes); 353 return Collections.unmodifiableMap(result); 354 } 355 356 @Provides 357 @Singleton 358 Map<String, ArtifactResolverPostProcessor> artifactResolverProcessors( 359 @Named(TrustedChecksumsArtifactResolverPostProcessor.NAME) ArtifactResolverPostProcessor trustedChecksums) { 360 Map<String, ArtifactResolverPostProcessor> result = new HashMap<>(); 361 result.put(TrustedChecksumsArtifactResolverPostProcessor.NAME, trustedChecksums); 362 return Collections.unmodifiableMap(result); 363 } 364 365 @Provides 366 @Singleton 367 Map<String, DependencyCollectorDelegate> dependencyCollectorDelegates( 368 @Named(BfDependencyCollector.NAME) DependencyCollectorDelegate bf, 369 @Named(DfDependencyCollector.NAME) DependencyCollectorDelegate df) { 370 Map<String, DependencyCollectorDelegate> result = new HashMap<>(); 371 result.put(BfDependencyCollector.NAME, bf); 372 result.put(DfDependencyCollector.NAME, df); 373 return Collections.unmodifiableMap(result); 374 } 375 376 @Provides 377 @Singleton 378 Map<String, ProvidedChecksumsSource> providedChecksumSources( 379 @Named(TrustedToProvidedChecksumsSourceAdapter.NAME) ProvidedChecksumsSource adapter) { 380 Map<String, ProvidedChecksumsSource> result = new HashMap<>(); 381 result.put(TrustedToProvidedChecksumsSourceAdapter.NAME, adapter); 382 return Collections.unmodifiableMap(result); 383 } 384 385 @Provides 386 @Singleton 387 Map<String, TrustedChecksumsSource> trustedChecksumSources( 388 @Named(SparseDirectoryTrustedChecksumsSource.NAME) TrustedChecksumsSource sparse, 389 @Named(SummaryFileTrustedChecksumsSource.NAME) TrustedChecksumsSource compact) { 390 Map<String, TrustedChecksumsSource> result = new HashMap<>(); 391 result.put(SparseDirectoryTrustedChecksumsSource.NAME, sparse); 392 result.put(SummaryFileTrustedChecksumsSource.NAME, compact); 393 return Collections.unmodifiableMap(result); 394 } 395 396 @Provides 397 @Singleton 398 Map<String, ChecksumAlgorithmFactory> provideChecksumTypes( 399 @Named(Sha512ChecksumAlgorithmFactory.NAME) ChecksumAlgorithmFactory sha512, 400 @Named(Sha256ChecksumAlgorithmFactory.NAME) ChecksumAlgorithmFactory sha256, 401 @Named(Sha1ChecksumAlgorithmFactory.NAME) ChecksumAlgorithmFactory sha1, 402 @Named(Md5ChecksumAlgorithmFactory.NAME) ChecksumAlgorithmFactory md5) { 403 Map<String, ChecksumAlgorithmFactory> result = new HashMap<>(); 404 result.put(Sha512ChecksumAlgorithmFactory.NAME, sha512); 405 result.put(Sha256ChecksumAlgorithmFactory.NAME, sha256); 406 result.put(Sha1ChecksumAlgorithmFactory.NAME, sha1); 407 result.put(Md5ChecksumAlgorithmFactory.NAME, md5); 408 return Collections.unmodifiableMap(result); 409 } 410 411 @SuppressWarnings("checkstyle:parameternumber") 412 @Provides 413 @Singleton 414 Map<String, NameMapper> provideNameMappers( 415 @Named(NameMappers.STATIC_NAME) NameMapper staticNameMapper, 416 @Named(NameMappers.GAV_NAME) NameMapper gavNameMapper, 417 @Named(NameMappers.GAECV_NAME) NameMapper gaecvNameMapper, 418 @Named(NameMappers.DISCRIMINATING_NAME) NameMapper discriminatingNameMapper, 419 @Named(NameMappers.FILE_GAV_NAME) NameMapper fileGavNameMapper, 420 @Named(NameMappers.FILE_GAECV_NAME) NameMapper fileGaecvNameMapper, 421 @Named(NameMappers.FILE_HGAV_NAME) NameMapper fileHashingGavNameMapper, 422 @Named(NameMappers.FILE_HGAECV_NAME) NameMapper fileHashingGaecvNameMapper) { 423 Map<String, NameMapper> result = new HashMap<>(); 424 result.put(NameMappers.STATIC_NAME, staticNameMapper); 425 result.put(NameMappers.GAV_NAME, gavNameMapper); 426 result.put(NameMappers.GAECV_NAME, gaecvNameMapper); 427 result.put(NameMappers.DISCRIMINATING_NAME, discriminatingNameMapper); 428 result.put(NameMappers.FILE_GAV_NAME, fileGavNameMapper); 429 result.put(NameMappers.FILE_GAECV_NAME, fileGaecvNameMapper); 430 result.put(NameMappers.FILE_HGAV_NAME, fileHashingGavNameMapper); 431 result.put(NameMappers.FILE_HGAECV_NAME, fileHashingGaecvNameMapper); 432 return Collections.unmodifiableMap(result); 433 } 434 435 @Provides 436 @Singleton 437 Map<String, NamedLockFactory> provideNamedLockFactories( 438 @Named(LocalReadWriteLockNamedLockFactory.NAME) NamedLockFactory localRwLock, 439 @Named(LocalSemaphoreNamedLockFactory.NAME) NamedLockFactory localSemaphore, 440 @Named(FileLockNamedLockFactory.NAME) NamedLockFactory fileLockFactory) { 441 Map<String, NamedLockFactory> result = new HashMap<>(); 442 result.put(LocalReadWriteLockNamedLockFactory.NAME, localRwLock); 443 result.put(LocalSemaphoreNamedLockFactory.NAME, localSemaphore); 444 result.put(FileLockNamedLockFactory.NAME, fileLockFactory); 445 return Collections.unmodifiableMap(result); 446 } 447 448 @Provides 449 @Singleton 450 Set<LocalRepositoryManagerFactory> provideLocalRepositoryManagerFactories( 451 @Named("simple") LocalRepositoryManagerFactory simple, 452 @Named("enhanced") LocalRepositoryManagerFactory enhanced) { 453 Set<LocalRepositoryManagerFactory> result = new HashSet<>(); 454 result.add(simple); 455 result.add(enhanced); 456 return Collections.unmodifiableSet(result); 457 } 458 459 @Provides 460 @Singleton 461 Set<RepositoryLayoutFactory> provideRepositoryLayoutFactories(@Named("maven2") RepositoryLayoutFactory maven2) { 462 Set<RepositoryLayoutFactory> result = new HashSet<>(); 463 result.add(maven2); 464 return Collections.unmodifiableSet(result); 465 } 466 467 @Provides 468 @Singleton 469 Set<RepositoryListener> providesRepositoryListeners() { 470 return Collections.emptySet(); 471 } 472 473 private static class Slf4jModule extends AbstractModule { 474 475 @Override 476 protected void configure() { 477 bind(LoggerFactory.class) // 478 .to(Slf4jLoggerFactory.class); 479 } 480 481 @Provides 482 @Singleton 483 ILoggerFactory getLoggerFactory() { 484 return org.slf4j.LoggerFactory.getILoggerFactory(); 485 } 486 } 487}