Package com.cloudbees.sdk.maven

Source Code of com.cloudbees.sdk.maven.RepositorySystemModule

/*
* Copyright 2010-2013, CloudBees Inc.
*
* Licensed 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.
*/

package com.cloudbees.sdk.maven;

import com.cloudbees.sdk.extensibility.ExtensionList;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.ning.http.client.providers.netty.NettyAsyncHttpProvider;
import org.apache.maven.repository.internal.MavenRepositorySystemSession;
import org.apache.maven.settings.Server;
import org.codehaus.plexus.DefaultContainerConfiguration;
import org.codehaus.plexus.DefaultPlexusContainer;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.PlexusContainerException;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.jboss.shrinkwrap.resolver.impl.maven.MavenDependencyResolverSettings;
import org.slf4j.LoggerFactory;
import org.sonatype.aether.RepositorySystem;
import org.sonatype.aether.impl.VersionResolver;
import org.sonatype.aether.repository.Authentication;
import org.sonatype.aether.repository.LocalRepository;
import org.sonatype.aether.repository.RemoteRepository;

import javax.inject.Singleton;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
* Module that adds {@link RepositorySystem} to Guice.
*
* <p>
* This makes it easy for plugins to interact with Maven repository, most typically to download
* artifacts.
*
* @author Kohsuke Kawaguchi
*/
public class RepositorySystemModule extends AbstractModule {
    @Override
    protected void configure() {
        // NettyAsyncHttpProvider prints some INFO-level messages. suppress them
        Logger.getLogger("com.ning.http.client.providers.netty.NettyAsyncHttpProvider").setLevel(Level.WARNING);
        LoggerFactory.getLogger(NettyAsyncHttpProvider.class);

        bind(LocalRepository.class).toProvider(LocalRepositorySetting.class);
        bind(MavenRepositorySystemSession.class).toProvider(MavenRepositorySystemSessionFactory.class);
    }

    @Provides @Aether @Singleton
    public PlexusContainer aetherContainer() {
        try {
            return new DefaultPlexusContainer(
                new DefaultContainerConfiguration(),
                new AbstractModule() {
                    @Override
                    protected void configure() {
                        bind(VersionResolver.class).to(VersionResolverImpl.class);
                    }
                }
            );
        } catch (PlexusContainerException e) {
            throw new RuntimeException("Unable to load RepositorySystem component by Plexus, cannot establish Aether dependency resolver.", e);
        }
    }

    @Provides @Singleton
    public RepositorySystem get(@Aether PlexusContainer aether) {
        return lookup(aether, RepositorySystem.class);
    }

    /**
     * List of remote repositories to resolve artifacts from.
     */
    @Provides @Singleton
    public List<RemoteRepository> getRemoteRepositories(ExtensionList<RemoteRepositoryDecorator> decorators) {
        List<RemoteRepository> repositories = new ArrayList<RemoteRepository>();
        MavenDependencyResolverSettings resolverSettings = new MavenDependencyResolverSettings();
        resolverSettings.setUseMavenCentral(true);
        List<RemoteRepository> repos = resolverSettings.getRemoteRepositories();
        for (RemoteRepository remoteRepository : repos) {
            Server server = resolverSettings.getSettings().getServer(remoteRepository.getId());
            if (server != null) {
                remoteRepository.setAuthentication(new Authentication(server.getUsername(), server.getPassword(), server.getPrivateKey(), server.getPassphrase()));
            }
            repositories.add(decorate(remoteRepository, decorators));
        }
        RemoteRepository r = new RemoteRepository("cloudbees-public-release", "default", "https://repository-cloudbees.forge.cloudbees.com/public-release/");
        repositories.add(decorate(r,decorators));
        return repositories;
    }

    private RemoteRepository decorate(RemoteRepository r, ExtensionList<RemoteRepositoryDecorator> decorators) {
        for (RemoteRepositoryDecorator d : decorators) {
            r = d.decorate(r);
        }
        return r;
    }

    protected  <T> T lookup(PlexusContainer aether, Class<T> type) {
        try {
            return aether.lookup(type);
        } catch (ComponentLookupException e) {
            throw new RuntimeException("Unable to lookup component RepositorySystem, cannot establish Aether dependency resolver.", e);
        }
    }
}
TOP

Related Classes of com.cloudbees.sdk.maven.RepositorySystemModule

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.