/*
* Copyright 2016 the original author or authors.
*
* 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 org.gradle.plugin.repository.internal;
import org.gradle.api.Action;
import org.gradle.api.artifacts.repositories.AuthenticationContainer;
import org.gradle.api.internal.artifacts.DependencyResolutionServices;
import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.VersionSelectorScheme;
import org.gradle.api.internal.artifacts.repositories.AuthenticationSupporter;
import org.gradle.api.internal.file.FileResolver;
import org.gradle.authentication.Authentication;
import org.gradle.internal.Factory;
import org.gradle.internal.artifacts.repositories.AuthenticationSupportedInternal;
import org.gradle.internal.authentication.AuthenticationSchemeRegistry;
import org.gradle.internal.authentication.DefaultAuthenticationContainer;
import org.gradle.internal.reflect.Instantiator;
import org.gradle.plugin.repository.GradlePluginPortal;
import org.gradle.plugin.repository.IvyPluginRepository;
import org.gradle.plugin.repository.MavenPluginRepository;
import org.gradle.plugin.use.resolve.service.internal.PluginResolutionServiceResolver;
import java.util.Map;
public class DefaultPluginRepositoryFactory implements PluginRepositoryFactory {
private final AuthenticationSchemeRegistry authenticationSchemeRegistry;
private final Factory<DependencyResolutionServices> dependencyResolutionServicesFactory;
private final VersionSelectorScheme versionSelectorScheme;
private final PluginResolutionServiceResolver pluginResolutionServiceResolver;
private final Instantiator instantiator;
public DefaultPluginRepositoryFactory(
PluginResolutionServiceResolver pluginResolutionServiceResolver,
Factory<DependencyResolutionServices> dependencyResolutionServicesFactory,
VersionSelectorScheme versionSelectorScheme, Instantiator instantiator,
AuthenticationSchemeRegistry authenticationSchemeRegistry) {
this.pluginResolutionServiceResolver = pluginResolutionServiceResolver;
this.instantiator = instantiator;
this.dependencyResolutionServicesFactory = dependencyResolutionServicesFactory;
this.versionSelectorScheme = versionSelectorScheme;
this.authenticationSchemeRegistry = authenticationSchemeRegistry;
}
@Override
public MavenPluginRepository maven(Action<? super MavenPluginRepository> configurationAction, FileResolver fileResolver) {
AuthenticationContainer authenticationContainer = makeAuthenticationContainer(instantiator, authenticationSchemeRegistry);
AuthenticationSupportedInternal delegate = new AuthenticationSupporter(instantiator, authenticationContainer);
DefaultMavenPluginRepository mavenPluginRepository = instantiator.newInstance(
DefaultMavenPluginRepository.class, fileResolver, dependencyResolutionServicesFactory.create(), versionSelectorScheme, delegate);
configurationAction.execute(mavenPluginRepository);
return mavenPluginRepository;
}
@Override
public IvyPluginRepository ivy(Action<? super IvyPluginRepository> configurationAction, FileResolver fileResolver) {
AuthenticationContainer authenticationContainer = makeAuthenticationContainer(instantiator, authenticationSchemeRegistry);
AuthenticationSupportedInternal delegate = new AuthenticationSupporter(instantiator, authenticationContainer);
DefaultIvyPluginRepository ivyPluginRepository = instantiator.newInstance(
DefaultIvyPluginRepository.class, fileResolver, dependencyResolutionServicesFactory.create(), versionSelectorScheme, delegate);
configurationAction.execute(ivyPluginRepository);
return ivyPluginRepository;
}
@Override
public GradlePluginPortal gradlePluginPortal() {
return new DefaultGradlePluginPortal(pluginResolutionServiceResolver);
}
private AuthenticationContainer makeAuthenticationContainer(Instantiator instantiator, AuthenticationSchemeRegistry authenticationSchemeRegistry) {
DefaultAuthenticationContainer container = instantiator.newInstance(DefaultAuthenticationContainer.class, instantiator);
for (Map.Entry<Class<Authentication>, Class<? extends Authentication>> e : authenticationSchemeRegistry.getRegisteredSchemes().entrySet()) {
container.registerBinding(e.getKey(), e.getValue());
}
return container;
}
}