001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019package org.eclipse.aether.connector.basic; 020 021import javax.inject.Inject; 022import javax.inject.Named; 023 024import java.util.Map; 025 026import org.eclipse.aether.RepositorySystemSession; 027import org.eclipse.aether.repository.RemoteRepository; 028import org.eclipse.aether.spi.checksums.ProvidedChecksumsSource; 029import org.eclipse.aether.spi.connector.RepositoryConnector; 030import org.eclipse.aether.spi.connector.RepositoryConnectorFactory; 031import org.eclipse.aether.spi.connector.checksum.ChecksumPolicyProvider; 032import org.eclipse.aether.spi.connector.layout.RepositoryLayoutProvider; 033import org.eclipse.aether.spi.connector.transport.TransporterProvider; 034import org.eclipse.aether.spi.io.ChecksumProcessor; 035import org.eclipse.aether.spi.io.PathProcessor; 036import org.eclipse.aether.transfer.NoRepositoryConnectorException; 037 038import static java.util.Objects.requireNonNull; 039 040/** 041 * A repository connector factory that employs pluggable 042 * {@link org.eclipse.aether.spi.connector.transport.TransporterFactory transporters} and 043 * {@link org.eclipse.aether.spi.connector.layout.RepositoryLayoutFactory repository layouts} for the transfers. 044 */ 045@Named(BasicRepositoryConnectorFactory.NAME) 046public final class BasicRepositoryConnectorFactory implements RepositoryConnectorFactory { 047 public static final String NAME = "basic"; 048 private final TransporterProvider transporterProvider; 049 050 private final RepositoryLayoutProvider layoutProvider; 051 052 private final ChecksumPolicyProvider checksumPolicyProvider; 053 054 private final PathProcessor pathProcessor; 055 056 private final ChecksumProcessor checksumProcessor; 057 058 private final Map<String, ProvidedChecksumsSource> providedChecksumsSources; 059 060 private float priority; 061 062 @Inject 063 public BasicRepositoryConnectorFactory( 064 TransporterProvider transporterProvider, 065 RepositoryLayoutProvider layoutProvider, 066 ChecksumPolicyProvider checksumPolicyProvider, 067 PathProcessor pathProcessor, 068 ChecksumProcessor checksumProcessor, 069 Map<String, ProvidedChecksumsSource> providedChecksumsSources) { 070 this.transporterProvider = requireNonNull(transporterProvider, "transporter provider cannot be null"); 071 this.layoutProvider = requireNonNull(layoutProvider, "repository layout provider cannot be null"); 072 this.checksumPolicyProvider = requireNonNull(checksumPolicyProvider, "checksum policy provider cannot be null"); 073 this.pathProcessor = requireNonNull(pathProcessor, "path processor cannot be null"); 074 this.checksumProcessor = requireNonNull(checksumProcessor, "checksum processor cannot be null"); 075 this.providedChecksumsSources = 076 requireNonNull(providedChecksumsSources, "provided checksum sources cannot be null"); 077 } 078 079 @Override 080 public float getPriority() { 081 return priority; 082 } 083 084 /** 085 * Sets the priority of this component. 086 * 087 * @param priority The priority. 088 * @return This component for chaining, never {@code null}. 089 */ 090 public BasicRepositoryConnectorFactory setPriority(float priority) { 091 this.priority = priority; 092 return this; 093 } 094 095 @Override 096 public RepositoryConnector newInstance(RepositorySystemSession session, RemoteRepository repository) 097 throws NoRepositoryConnectorException { 098 requireNonNull(session, "session cannot be null"); 099 requireNonNull(repository, "repository cannot be null"); 100 101 return new BasicRepositoryConnector( 102 session, 103 repository, 104 transporterProvider, 105 layoutProvider, 106 checksumPolicyProvider, 107 pathProcessor, 108 checksumProcessor, 109 providedChecksumsSources); 110 } 111}