/* * Copyright 2012 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.api.internal.artifacts.repositories; import org.gradle.api.artifacts.dsl.RepositoryHandler; import org.gradle.api.artifacts.repositories.AuthenticationContainer; import org.gradle.api.artifacts.repositories.FlatDirectoryArtifactRepository; import org.gradle.api.artifacts.repositories.IvyArtifactRepository; import org.gradle.api.artifacts.repositories.MavenArtifactRepository; import org.gradle.api.internal.InstantiatorFactory; import org.gradle.api.internal.artifacts.BaseRepositoryFactory; import org.gradle.api.internal.artifacts.ImmutableModuleIdentifierFactory; import org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler; import org.gradle.api.internal.artifacts.ivyservice.IvyContextManager; import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.parser.MetaDataParser; import org.gradle.api.internal.artifacts.mvnsettings.LocalMavenRepositoryLocator; import org.gradle.api.internal.artifacts.repositories.transport.RepositoryTransportFactory; import org.gradle.api.internal.file.FileResolver; import org.gradle.authentication.Authentication; import org.gradle.internal.authentication.AuthenticationSchemeRegistry; import org.gradle.internal.authentication.DefaultAuthenticationContainer; import org.gradle.internal.component.external.model.ModuleComponentArtifactIdentifier; import org.gradle.internal.component.external.model.ModuleComponentArtifactMetadata; import org.gradle.internal.component.external.model.MutableMavenModuleResolveMetadata; import org.gradle.internal.reflect.Instantiator; import org.gradle.internal.resource.local.FileStore; import org.gradle.internal.resource.local.LocallyAvailableResourceFinder; import java.io.File; import java.util.Map; public class DefaultBaseRepositoryFactory implements BaseRepositoryFactory { private final LocalMavenRepositoryLocator localMavenRepositoryLocator; private final FileResolver fileResolver; private final Instantiator instantiator; private final RepositoryTransportFactory transportFactory; private final LocallyAvailableResourceFinder<ModuleComponentArtifactMetadata> locallyAvailableResourceFinder; private final FileStore<ModuleComponentArtifactIdentifier> artifactFileStore; private final FileStore<String> externalResourcesFileStore; private final MetaDataParser<MutableMavenModuleResolveMetadata> pomParser; private final AuthenticationSchemeRegistry authenticationSchemeRegistry; private final IvyContextManager ivyContextManager; private final ImmutableModuleIdentifierFactory moduleIdentifierFactory; private final InstantiatorFactory instantiatorFactory; public DefaultBaseRepositoryFactory(LocalMavenRepositoryLocator localMavenRepositoryLocator, FileResolver fileResolver, RepositoryTransportFactory transportFactory, LocallyAvailableResourceFinder<ModuleComponentArtifactMetadata> locallyAvailableResourceFinder, FileStore<ModuleComponentArtifactIdentifier> artifactFileStore, FileStore<String> externalResourcesFileStore, MetaDataParser<MutableMavenModuleResolveMetadata> pomParser, AuthenticationSchemeRegistry authenticationSchemeRegistry, IvyContextManager ivyContextManager, ImmutableModuleIdentifierFactory moduleIdentifierFactory, InstantiatorFactory instantiatorFactory) { this.localMavenRepositoryLocator = localMavenRepositoryLocator; this.fileResolver = fileResolver; this.instantiator = instantiatorFactory.decorate(); this.transportFactory = transportFactory; this.locallyAvailableResourceFinder = locallyAvailableResourceFinder; this.artifactFileStore = artifactFileStore; this.externalResourcesFileStore = externalResourcesFileStore; this.pomParser = pomParser; this.authenticationSchemeRegistry = authenticationSchemeRegistry; this.ivyContextManager = ivyContextManager; this.moduleIdentifierFactory = moduleIdentifierFactory; this.instantiatorFactory = instantiatorFactory; } public FlatDirectoryArtifactRepository createFlatDirRepository() { return instantiator.newInstance(DefaultFlatDirArtifactRepository.class, fileResolver, transportFactory, locallyAvailableResourceFinder, artifactFileStore, ivyContextManager, moduleIdentifierFactory); } public MavenArtifactRepository createMavenLocalRepository() { MavenArtifactRepository mavenRepository = instantiator.newInstance(DefaultMavenLocalArtifactRepository.class, fileResolver, transportFactory, locallyAvailableResourceFinder, instantiator, artifactFileStore, pomParser, createAuthenticationContainer(), moduleIdentifierFactory); final File localMavenRepository = localMavenRepositoryLocator.getLocalMavenRepository(); mavenRepository.setUrl(localMavenRepository); return mavenRepository; } public MavenArtifactRepository createJCenterRepository() { MavenArtifactRepository mavenRepository = createMavenRepository(); mavenRepository.setUrl(DefaultRepositoryHandler.BINTRAY_JCENTER_URL); return mavenRepository; } public MavenArtifactRepository createMavenCentralRepository() { MavenArtifactRepository mavenRepository = createMavenRepository(); mavenRepository.setUrl(RepositoryHandler.MAVEN_CENTRAL_URL); return mavenRepository; } public MavenArtifactRepository createGoogleRepository() { MavenArtifactRepository mavenRepository = createMavenRepository(); mavenRepository.setUrl(RepositoryHandler.GOOGLE_URL); return mavenRepository; } public IvyArtifactRepository createIvyRepository() { return instantiator.newInstance(DefaultIvyArtifactRepository.class, fileResolver, transportFactory, locallyAvailableResourceFinder, artifactFileStore, externalResourcesFileStore, createAuthenticationContainer(), ivyContextManager, moduleIdentifierFactory, instantiatorFactory); } public MavenArtifactRepository createMavenRepository() { return instantiator.newInstance(DefaultMavenArtifactRepository.class, fileResolver, transportFactory, locallyAvailableResourceFinder, instantiator, artifactFileStore, pomParser, createAuthenticationContainer(), moduleIdentifierFactory, externalResourcesFileStore); } protected AuthenticationContainer createAuthenticationContainer() { 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; } }