View Javadoc
1   package org.eclipse.aether.connector.basic;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.util.Collections;
23  import java.util.Map;
24  
25  import javax.inject.Inject;
26  import javax.inject.Named;
27  
28  import static java.util.Objects.requireNonNull;
29  
30  import org.eclipse.aether.RepositorySystemSession;
31  import org.eclipse.aether.repository.RemoteRepository;
32  import org.eclipse.aether.spi.connector.RepositoryConnector;
33  import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
34  import org.eclipse.aether.spi.connector.checksum.ChecksumPolicyProvider;
35  import org.eclipse.aether.spi.connector.checksum.ProvidedChecksumsSource;
36  import org.eclipse.aether.spi.connector.layout.RepositoryLayoutProvider;
37  import org.eclipse.aether.spi.connector.transport.TransporterProvider;
38  import org.eclipse.aether.spi.io.FileProcessor;
39  import org.eclipse.aether.spi.locator.Service;
40  import org.eclipse.aether.spi.locator.ServiceLocator;
41  import org.eclipse.aether.transfer.NoRepositoryConnectorException;
42  
43  /**
44   * A repository connector factory that employs pluggable
45   * {@link org.eclipse.aether.spi.connector.transport.TransporterFactory transporters} and
46   * {@link org.eclipse.aether.spi.connector.layout.RepositoryLayoutFactory repository layouts} for the transfers.
47   */
48  @Named( "basic" )
49  public final class BasicRepositoryConnectorFactory
50      implements RepositoryConnectorFactory, Service
51  {
52      private TransporterProvider transporterProvider;
53  
54      private RepositoryLayoutProvider layoutProvider;
55  
56      private ChecksumPolicyProvider checksumPolicyProvider;
57  
58      private FileProcessor fileProcessor;
59  
60      private Map<String, ProvidedChecksumsSource> providedChecksumsSources;
61  
62      private float priority;
63  
64      /**
65       * Creates an (uninitialized) instance of this connector factory. <em>Note:</em> In case of manual instantiation by
66       * clients, the new factory needs to be configured via its various mutators before first use or runtime errors will
67       * occur.
68       */
69      public BasicRepositoryConnectorFactory()
70      {
71          // enables default constructor
72      }
73  
74      @Inject
75      BasicRepositoryConnectorFactory( TransporterProvider transporterProvider,
76                                       RepositoryLayoutProvider layoutProvider,
77                                       ChecksumPolicyProvider checksumPolicyProvider,
78                                       FileProcessor fileProcessor,
79                                       Map<String, ProvidedChecksumsSource> providedChecksumsSources )
80      {
81          setTransporterProvider( transporterProvider );
82          setRepositoryLayoutProvider( layoutProvider );
83          setChecksumPolicyProvider( checksumPolicyProvider );
84          setFileProcessor( fileProcessor );
85          setProvidedChecksumSources( providedChecksumsSources );
86      }
87  
88      public void initService( ServiceLocator locator )
89      {
90          setTransporterProvider( locator.getService( TransporterProvider.class ) );
91          setRepositoryLayoutProvider( locator.getService( RepositoryLayoutProvider.class ) );
92          setChecksumPolicyProvider( locator.getService( ChecksumPolicyProvider.class ) );
93          setFileProcessor( locator.getService( FileProcessor.class ) );
94          setProvidedChecksumSources( Collections.emptyMap() );
95      }
96  
97      /**
98       * Sets the transporter provider to use for this component.
99       *
100      * @param transporterProvider The transporter provider to use, must not be {@code null}.
101      * @return This component for chaining, never {@code null}.
102      */
103     public BasicRepositoryConnectorFactory setTransporterProvider( TransporterProvider transporterProvider )
104     {
105         this.transporterProvider = requireNonNull( transporterProvider, "transporter provider cannot be null" );
106         return this;
107     }
108 
109     /**
110      * Sets the repository layout provider to use for this component.
111      *
112      * @param layoutProvider The repository layout provider to use, must not be {@code null}.
113      * @return This component for chaining, never {@code null}.
114      */
115     public BasicRepositoryConnectorFactory setRepositoryLayoutProvider( RepositoryLayoutProvider layoutProvider )
116     {
117         this.layoutProvider =  requireNonNull( layoutProvider, "repository layout provider cannot be null" );
118         return this;
119     }
120 
121     /**
122      * Sets the checksum policy provider to use for this component.
123      *
124      * @param checksumPolicyProvider The checksum policy provider to use, must not be {@code null}.
125      * @return This component for chaining, never {@code null}.
126      */
127     public BasicRepositoryConnectorFactory setChecksumPolicyProvider( ChecksumPolicyProvider checksumPolicyProvider )
128     {
129         this.checksumPolicyProvider = requireNonNull(
130                 checksumPolicyProvider, "checksum policy provider cannot be null" );
131         return this;
132     }
133 
134     /**
135      * Sets the file processor to use for this component.
136      *
137      * @param fileProcessor The file processor to use, must not be {@code null}.
138      * @return This component for chaining, never {@code null}.
139      */
140     public BasicRepositoryConnectorFactory setFileProcessor( FileProcessor fileProcessor )
141     {
142         this.fileProcessor = requireNonNull( fileProcessor, "file processor cannot be null" );
143         return this;
144     }
145 
146     /**
147      * Sets the provided checksum sources to use for this component.
148      *
149      * @param providedChecksumsSources The provided checksum sources to use, must not be {@code null}.
150      * @return This component for chaining, never {@code null}.
151      * @since 1.8.0
152      */
153     public BasicRepositoryConnectorFactory setProvidedChecksumSources(
154         Map<String, ProvidedChecksumsSource> providedChecksumsSources )
155     {
156         this.providedChecksumsSources = requireNonNull(
157             providedChecksumsSources, "provided checksum sources cannot be null"
158         );
159         return this;
160     }
161 
162     public float getPriority()
163     {
164         return priority;
165     }
166 
167     /**
168      * Sets the priority of this component.
169      *
170      * @param priority The priority.
171      * @return This component for chaining, never {@code null}.
172      */
173     public BasicRepositoryConnectorFactory setPriority( float priority )
174     {
175         this.priority = priority;
176         return this;
177     }
178 
179     public RepositoryConnector newInstance( RepositorySystemSession session, RemoteRepository repository )
180         throws NoRepositoryConnectorException
181     {
182         requireNonNull( session, "session cannot be null" );
183         requireNonNull( repository, "repository cannot be null" );
184 
185         return new BasicRepositoryConnector( session, repository, transporterProvider, layoutProvider,
186                                              checksumPolicyProvider, fileProcessor, providedChecksumsSources );
187     }
188 
189 }