package org.eclipse.aether.impl.guice;

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *  http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import javax.inject.Named;
import javax.inject.Singleton;

import org.eclipse.aether.RepositoryListener;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.impl.ArtifactResolver;
import org.eclipse.aether.impl.DependencyCollector;
import org.eclipse.aether.impl.Deployer;
import org.eclipse.aether.impl.Installer;
import org.eclipse.aether.impl.LocalRepositoryProvider;
import org.eclipse.aether.impl.MetadataResolver;
import org.eclipse.aether.impl.OfflineController;
import org.eclipse.aether.impl.RemoteRepositoryManager;
import org.eclipse.aether.impl.RepositoryConnectorProvider;
import org.eclipse.aether.impl.RepositoryEventDispatcher;
import org.eclipse.aether.impl.SyncContextFactory;
import org.eclipse.aether.impl.UpdateCheckManager;
import org.eclipse.aether.impl.UpdatePolicyAnalyzer;
import org.eclipse.aether.internal.impl.DefaultArtifactResolver;
import org.eclipse.aether.internal.impl.DefaultChecksumPolicyProvider;
import org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector;
import org.eclipse.aether.internal.impl.DefaultDeployer;
import org.eclipse.aether.internal.impl.DefaultFileProcessor;
import org.eclipse.aether.internal.impl.DefaultInstaller;
import org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider;
import org.eclipse.aether.internal.impl.DefaultMetadataResolver;
import org.eclipse.aether.internal.impl.DefaultOfflineController;
import org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager;
import org.eclipse.aether.internal.impl.DefaultRepositoryConnectorProvider;
import org.eclipse.aether.internal.impl.DefaultRepositoryEventDispatcher;
import org.eclipse.aether.internal.impl.DefaultRepositoryLayoutProvider;
import org.eclipse.aether.internal.impl.DefaultRepositorySystem;
import org.eclipse.aether.internal.impl.DefaultSyncContextFactory;
import org.eclipse.aether.internal.impl.DefaultTransporterProvider;
import org.eclipse.aether.internal.impl.DefaultUpdateCheckManager;
import org.eclipse.aether.internal.impl.DefaultUpdatePolicyAnalyzer;
import org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManagerFactory;
import org.eclipse.aether.internal.impl.Maven2RepositoryLayoutFactory;
import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
import org.eclipse.aether.internal.impl.slf4j.Slf4jLoggerFactory;
import org.eclipse.aether.spi.connector.checksum.ChecksumPolicyProvider;
import org.eclipse.aether.spi.connector.layout.RepositoryLayoutFactory;
import org.eclipse.aether.spi.connector.layout.RepositoryLayoutProvider;
import org.eclipse.aether.spi.connector.transport.TransporterProvider;
import org.eclipse.aether.spi.io.FileProcessor;
import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
import org.eclipse.aether.spi.log.LoggerFactory;
import org.slf4j.ILoggerFactory;

import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.name.Names;

A ready-made Guice module that sets up bindings for all components from this library. To acquire a complete repository system, clients need to bind an artifact descriptor reader, a version resolver, a version range resolver, zero or more metadata generator factories, some repository connector and transporter factories to access remote repositories.
@noextendThis class must not be extended by clients and will eventually be marked final without prior notice.
/** * A ready-made <a href="https://github.com/google/guice" target="_blank">Guice</a> module that sets up bindings * for all components from this library. To acquire a complete repository system, clients need to bind an artifact * descriptor reader, a version resolver, a version range resolver, zero or more metadata generator factories, some * repository connector and transporter factories to access remote repositories. * * @noextend This class must not be extended by clients and will eventually be marked {@code final} without prior * notice. */
public class AetherModule extends AbstractModule {
Creates a new instance of this Guice module, typically for invoking install.install(Module).
/** * Creates a new instance of this Guice module, typically for invoking * {@link com.google.inject.Binder#install(com.google.inject.Module)}. */
public AetherModule() { }
Configures Guice with bindings for Aether components provided by this library.
/** * Configures Guice with bindings for Aether components provided by this library. */
@Override protected void configure() { bind( RepositorySystem.class ) // .to( DefaultRepositorySystem.class ).in( Singleton.class ); bind( ArtifactResolver.class ) // .to( DefaultArtifactResolver.class ).in( Singleton.class ); bind( DependencyCollector.class ) // .to( DefaultDependencyCollector.class ).in( Singleton.class ); bind( Deployer.class ) // .to( DefaultDeployer.class ).in( Singleton.class ); bind( Installer.class ) // .to( DefaultInstaller.class ).in( Singleton.class ); bind( MetadataResolver.class ) // .to( DefaultMetadataResolver.class ).in( Singleton.class ); bind( RepositoryLayoutProvider.class ) // .to( DefaultRepositoryLayoutProvider.class ).in( Singleton.class ); bind( RepositoryLayoutFactory.class ).annotatedWith( Names.named( "maven2" ) ) // .to( Maven2RepositoryLayoutFactory.class ).in( Singleton.class ); bind( TransporterProvider.class ) // .to( DefaultTransporterProvider.class ).in( Singleton.class ); bind( ChecksumPolicyProvider.class ) // .to( DefaultChecksumPolicyProvider.class ).in( Singleton.class ); bind( RepositoryConnectorProvider.class ) // .to( DefaultRepositoryConnectorProvider.class ).in( Singleton.class ); bind( RemoteRepositoryManager.class ) // .to( DefaultRemoteRepositoryManager.class ).in( Singleton.class ); bind( UpdateCheckManager.class ) // .to( DefaultUpdateCheckManager.class ).in( Singleton.class ); bind( UpdatePolicyAnalyzer.class ) // .to( DefaultUpdatePolicyAnalyzer.class ).in( Singleton.class ); bind( FileProcessor.class ) // .to( DefaultFileProcessor.class ).in( Singleton.class ); bind( SyncContextFactory.class ) // .to( DefaultSyncContextFactory.class ).in( Singleton.class ); bind( RepositoryEventDispatcher.class ) // .to( DefaultRepositoryEventDispatcher.class ).in( Singleton.class ); bind( OfflineController.class ) // .to( DefaultOfflineController.class ).in( Singleton.class ); bind( LocalRepositoryProvider.class ) // .to( DefaultLocalRepositoryProvider.class ).in( Singleton.class ); bind( LocalRepositoryManagerFactory.class ).annotatedWith( Names.named( "simple" ) ) // .to( SimpleLocalRepositoryManagerFactory.class ).in( Singleton.class ); bind( LocalRepositoryManagerFactory.class ).annotatedWith( Names.named( "enhanced" ) ) // .to( EnhancedLocalRepositoryManagerFactory.class ).in( Singleton.class ); install( new Slf4jModule() ); } @Provides @Singleton Set<LocalRepositoryManagerFactory> provideLocalRepositoryManagerFactories( @Named( "simple" ) LocalRepositoryManagerFactory simple, @Named( "enhanced" ) LocalRepositoryManagerFactory enhanced ) { Set<LocalRepositoryManagerFactory> factories = new HashSet<>(); factories.add( simple ); factories.add( enhanced ); return Collections.unmodifiableSet( factories ); } @Provides @Singleton Set<RepositoryLayoutFactory> provideRepositoryLayoutFactories( @Named( "maven2" ) RepositoryLayoutFactory maven2 ) { Set<RepositoryLayoutFactory> factories = new HashSet<>(); factories.add( maven2 ); return Collections.unmodifiableSet( factories ); } @Provides @Singleton Set<RepositoryListener> providesRepositoryListeners() { return Collections.emptySet(); } private static class Slf4jModule extends AbstractModule { @Override protected void configure() { bind( LoggerFactory.class ) // .to( Slf4jLoggerFactory.class ); } @Provides @Singleton ILoggerFactory getLoggerFactory() { return org.slf4j.LoggerFactory.getILoggerFactory(); } } }