Package org.jfrog.build.extractor.maven.resolver

Source Code of org.jfrog.build.extractor.maven.resolver.ResolutionHelper

package org.jfrog.build.extractor.maven.resolver;

import org.apache.maven.repository.internal.DefaultArtifactDescriptorReader;
import org.codehaus.plexus.PlexusConstants;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.context.Context;
import org.codehaus.plexus.context.ContextException;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
import org.jfrog.build.client.ArtifactoryClientConfiguration;
import org.jfrog.build.extractor.BuildInfoExtractorUtils;
import org.jfrog.build.extractor.maven.Maven3BuildInfoLogger;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;

/**
* Created by liorh on 4/24/14.
*/

@Component(role = ResolutionHelper.class)
public class ResolutionHelper implements Contextualizable {

    @Requirement
    private Logger logger;

    private ArtifactoryClientConfiguration internalConfiguration;
    private PlexusContainer plexusContainer;

    public void init(Properties allMavenProps) {
        if (internalConfiguration != null) {
            return;
        }

        Maven3BuildInfoLogger log = new Maven3BuildInfoLogger(logger);
        Properties allProps = BuildInfoExtractorUtils.mergePropertiesWithSystemAndPropertyFile(allMavenProps, log);
        internalConfiguration = new ArtifactoryClientConfiguration(log);
        internalConfiguration.fillFromProperties(allProps);
    }

    private void setArtifactoryEclipseArtifactResolver() throws ComponentLookupException {
        DefaultArtifactDescriptorReader descriptorReader = (DefaultArtifactDescriptorReader)plexusContainer.lookup("org.eclipse.aether.impl.ArtifactDescriptorReader");
        org.eclipse.aether.internal.impl.DefaultRepositorySystem repositorySystem = (org.eclipse.aether.internal.impl.DefaultRepositorySystem)plexusContainer.lookup("org.eclipse.aether.RepositorySystem");

        org.eclipse.aether.impl.ArtifactResolver artifactoryResolver = (org.eclipse.aether.impl.ArtifactResolver)plexusContainer.lookup("org.jfrog.build.extractor.maven.resolver.ArtifactoryEclipseArtifactResolver");

        descriptorReader.setArtifactResolver(artifactoryResolver);
        repositorySystem.setArtifactResolver(artifactoryResolver);//
    }

    private void setArtifactorySonatypeArtifactResolver() throws ComponentLookupException, InvocationTargetException, IllegalAccessException {
        DefaultArtifactDescriptorReader descriptorReader = (DefaultArtifactDescriptorReader)plexusContainer.lookup("org.sonatype.aether.impl.ArtifactDescriptorReader");
        org.sonatype.aether.impl.internal.DefaultRepositorySystem repositorySystem = (org.sonatype.aether.impl.internal.DefaultRepositorySystem)plexusContainer.lookup("org.sonatype.aether.RepositorySystem");

        org.sonatype.aether.impl.ArtifactResolver artifactoryResolver = (org.sonatype.aether.impl.ArtifactResolver)plexusContainer.lookup("org.jfrog.build.extractor.maven.resolver.ArtifactorySonatypeArtifactResolver");
        repositorySystem.setArtifactResolver(artifactoryResolver);

        // Setting the resolver. This is done using reflection, since the signature of the
        // DefaultArtifactDescriptorReader.setArtifactResolver method changed in Maven 3.1.x:
        Method setArtifactResolverMethod = null;
        Method[] methods = DefaultArtifactDescriptorReader.class.getDeclaredMethods();
        for (Method method : methods) {
            if ("setArtifactResolver".equals(method.getName())) {
                setArtifactResolverMethod = method;
                break;
            }
        }
        if (setArtifactResolverMethod == null) {
            throw new RuntimeException("Failed to enforce Artifactory resolver. Method DefaultArtifactDescriptorReader.setArtifactResolver does not exist");
        }
        setArtifactResolverMethod.invoke(descriptorReader, artifactoryResolver);
    }

    /**
     * The method replaces the DefaultArtifactResolver instance with an instance of a class extending DefaultArtifactResolver
     * (either ArtifactoryEclipseArtifactResolver or ArtifactorySonatypeArtifactResolver, depending on the Maven version being used).
     * The new extending class sets the configured Artifactory resolution repositories for each resolved artifact.
     *
     * @throws ComponentLookupException
     */
    public void enforceArtifactoryResolver() throws ComponentLookupException, InvocationTargetException, IllegalAccessException {
        if (plexusContainer.hasComponent("org.eclipse.aether.impl.ArtifactDescriptorReader")) {
            setArtifactoryEclipseArtifactResolver();
        } else
        if (plexusContainer.hasComponent("org.sonatype.aether.impl.ArtifactDescriptorReader")) {
            setArtifactorySonatypeArtifactResolver();
        } else {
            throw new RuntimeException("Could not fetch either org.eclipse.aether.impl.ArtifactDescriptorReader or org.sonatype.aether.impl.ArtifactDescriptorReader from the container");
        }
    }

    /**
     * Determines a deployed artifact's scope (either "project" or "build") according to the maven's request context sent as an argument.
     * @param requestContext    The deployed artifact's request context.
     * @return                  Scope value for the request context.
     */
    public String getScopeByRequestContext(String requestContext) {
        if (requestContext == null) {
            return "project";
        }
        if ("plugin".equals(requestContext)) {
            return "build";
        }
        return "project";
    }

    public String getRepoReleaseUrl() {
        return internalConfiguration.resolver.getUrl(internalConfiguration.resolver.getRepoKey());
    }

    public String getRepoSnapshotUrl() {
        return internalConfiguration.resolver.getUrl(internalConfiguration.resolver.getDownloadSnapshotRepoKey());
    }

    public String getRepoUsername() {
        return internalConfiguration.resolver.getUsername();
    }

    public String getRepoPassword() {
        return internalConfiguration.resolver.getPassword();
    }

    public String getProxyHost() {
        return internalConfiguration.proxy.getHost();
    }

    public Integer getProxyPort() {
        return internalConfiguration.proxy.getPort();
    }

    public String getProxyUsername() {
        return internalConfiguration.proxy.getUsername();
    }

    public String getProxyPassword() {
        return internalConfiguration.proxy.getPassword();
    }

    @Override
    public void contextualize(Context context) throws ContextException {
        plexusContainer = (PlexusContainer)context.get(PlexusConstants.PLEXUS_KEY);
    }
}
TOP

Related Classes of org.jfrog.build.extractor.maven.resolver.ResolutionHelper

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.