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 javax.inject.Inject;
23  import javax.inject.Named;
24  
25  import static java.util.Objects.requireNonNull;
26  
27  import org.eclipse.aether.RepositorySystemSession;
28  import org.eclipse.aether.repository.RemoteRepository;
29  import org.eclipse.aether.spi.connector.RepositoryConnector;
30  import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
31  import org.eclipse.aether.spi.connector.checksum.ChecksumPolicyProvider;
32  import org.eclipse.aether.spi.connector.layout.RepositoryLayoutProvider;
33  import org.eclipse.aether.spi.connector.transport.TransporterProvider;
34  import org.eclipse.aether.spi.io.FileProcessor;
35  import org.eclipse.aether.spi.locator.Service;
36  import org.eclipse.aether.spi.locator.ServiceLocator;
37  import org.eclipse.aether.spi.log.Logger;
38  import org.eclipse.aether.spi.log.LoggerFactory;
39  import org.eclipse.aether.spi.log.NullLoggerFactory;
40  import org.eclipse.aether.transfer.NoRepositoryConnectorException;
41  
42  /**
43   * A repository connector factory that employs pluggable
44   * {@link org.eclipse.aether.spi.connector.transport.TransporterFactory transporters} and
45   * {@link org.eclipse.aether.spi.connector.layout.RepositoryLayoutFactory repository layouts} for the transfers.
46   */
47  @Named( "basic" )
48  public final class BasicRepositoryConnectorFactory
49      implements RepositoryConnectorFactory, Service
50  {
51  
52      private Logger logger = NullLoggerFactory.LOGGER;
53  
54      private TransporterProvider transporterProvider;
55  
56      private RepositoryLayoutProvider layoutProvider;
57  
58      private ChecksumPolicyProvider checksumPolicyProvider;
59  
60      private FileProcessor fileProcessor;
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, RepositoryLayoutProvider layoutProvider,
76                                       ChecksumPolicyProvider checksumPolicyProvider, FileProcessor fileProcessor,
77                                       LoggerFactory loggerFactory )
78      {
79          setTransporterProvider( transporterProvider );
80          setRepositoryLayoutProvider( layoutProvider );
81          setChecksumPolicyProvider( checksumPolicyProvider );
82          setFileProcessor( fileProcessor );
83          setLoggerFactory( loggerFactory );
84      }
85  
86      public void initService( ServiceLocator locator )
87      {
88          setLoggerFactory( locator.getService( LoggerFactory.class ) );
89          setTransporterProvider( locator.getService( TransporterProvider.class ) );
90          setRepositoryLayoutProvider( locator.getService( RepositoryLayoutProvider.class ) );
91          setChecksumPolicyProvider( locator.getService( ChecksumPolicyProvider.class ) );
92          setFileProcessor( locator.getService( FileProcessor.class ) );
93      }
94  
95      /**
96       * Sets the logger factory to use for this component.
97       * 
98       * @param loggerFactory The logger factory to use, may be {@code null} to disable logging.
99       * @return This component for chaining, never {@code null}.
100      */
101     public BasicRepositoryConnectorFactory setLoggerFactory( LoggerFactory loggerFactory )
102     {
103         this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, BasicRepositoryConnector.class );
104         return this;
105     }
106 
107     /**
108      * Sets the transporter provider to use for this component.
109      *
110      * @param transporterProvider The transporter provider to use, must not be {@code null}.
111      * @return This component for chaining, never {@code null}.
112      */
113     public BasicRepositoryConnectorFactory setTransporterProvider( TransporterProvider transporterProvider )
114     {
115         this.transporterProvider = requireNonNull( transporterProvider, "transporter provider cannot be null" );
116         return this;
117     }
118 
119     /**
120      * Sets the repository layout provider to use for this component.
121      *
122      * @param layoutProvider The repository layout provider to use, must not be {@code null}.
123      * @return This component for chaining, never {@code null}.
124      */
125     public BasicRepositoryConnectorFactory setRepositoryLayoutProvider( RepositoryLayoutProvider layoutProvider )
126     {
127         this.layoutProvider =  requireNonNull( layoutProvider, "repository layout provider cannot be null" );
128         return this;
129     }
130 
131     /**
132      * Sets the checksum policy provider to use for this component.
133      *
134      * @param checksumPolicyProvider The checksum policy provider to use, must not be {@code null}.
135      * @return This component for chaining, never {@code null}.
136      */
137     public BasicRepositoryConnectorFactory setChecksumPolicyProvider( ChecksumPolicyProvider checksumPolicyProvider )
138     {
139         this.checksumPolicyProvider = requireNonNull( checksumPolicyProvider, "checksum policy provider cannot be null" );
140         return this;
141     }
142 
143     /**
144      * Sets the file processor to use for this component.
145      *
146      * @param fileProcessor The file processor to use, must not be {@code null}.
147      * @return This component for chaining, never {@code null}.
148      */
149     public BasicRepositoryConnectorFactory setFileProcessor( FileProcessor fileProcessor )
150     {
151         this.fileProcessor = requireNonNull( fileProcessor, "file processor cannot be null" );
152         return this;
153     }
154 
155     public float getPriority()
156     {
157         return priority;
158     }
159 
160     /**
161      * Sets the priority of this component.
162      * 
163      * @param priority The priority.
164      * @return This component for chaining, never {@code null}.
165      */
166     public BasicRepositoryConnectorFactory setPriority( float priority )
167     {
168         this.priority = priority;
169         return this;
170     }
171 
172     public RepositoryConnector newInstance( RepositorySystemSession session, RemoteRepository repository )
173         throws NoRepositoryConnectorException
174     {
175         return new BasicRepositoryConnector( session, repository, transporterProvider, layoutProvider,
176                                              checksumPolicyProvider, fileProcessor, logger );
177     }
178 
179 }